การรับไอเท็มตามดัชนี


321

ฉันเพิ่งเริ่มใช้ c # ย้ายจาก Java ฉันไม่สามารถหาวิธีรับไอเท็มตามดัชนีได้ ใน java เพื่อให้ได้ไอเท็มแรกของรายการมันจะเป็น:

list1.get(0);

อะไรคือสิ่งที่เทียบเท่าใน c #?


4
ดูstackoverflow.com/questions/5326874/…สำหรับการสนทนาว่าจะใช้ตัวดำเนินการ [] หรือวิธี ElementAt () อย่างไร
ngm

คำตอบ:


362
list1[0];

ประเภทรายการของสมมติว่ามีการกำหนดดัชนี


5
คำตอบเดียวที่อธิบายว่าทำไมจึงเป็นไปได้ที่จะเข้าถึงรายการซึ่งเป็นวัตถุเช่นอาร์เรย์
PrashanD

มันส่งคืนสำเนาของวัตถุในรายการหรือไม่ obj = list [0]; list.clear (); // obj จะยังคงมีประชากรอยู่หรือไม่
Paul McCarthy

1
@Paul McCarthy: คุณสามารถทดสอบสิ่งนี้ด้วยตัวเองได้อย่างง่ายดาย แต่ใช่ รายการอ้างอิงการอ้างอิงไปยังวัตถุ การล้างรายการไม่มีผลกับวัตถุที่อยู่ในรายการ หากไม่มีการอ้างอิงอื่น ๆ ไปยังวัตถุเหล่านั้นพวกเขาจะเก็บขยะในบางเวลา
มิทช์ข้าวสาลี

241

คุณสามารถใช้วิธีการขยาย ElementAt ในรายการ

ตัวอย่างเช่น:

// Get the first item from the list

using System.Linq;

var myList = new List<string>{ "Yes", "No", "Maybe"};
var firstItem = myList.ElementAt(0);

// Do something with firstItem

24
เพียงเพื่อให้ทราบว่า ElementAt () using System.Linq;ต้อง
ngm

16
มีข้อได้เปรียบเหนือสิ่งนี้มากกว่าmyList[0]สัญกรณ์มาตรฐานหรือไม่?
AnalogWeapon

5
"ทำไมฉันถึงใช้ Enumerable.ElementAt () กับตัวดำเนินการ [] stackoverflow.com/questions/5326874/…
Lavande

3
.ElementAtOrDefault();
amit jha

@AnalogWeapon ใช่มี - คุณสามารถใช้มันเป็นส่วนหนึ่งของห่วงโซ่ความปลอดภัยโมฆะเช่นmyCollectionWhichMightBeNull?.ElementAt(0)หรือเพื่อปกป้อง Againt องค์ประกอบที่ไม่มีอยู่:myCollection.ElementAtOrDefault(0)?.SomeProperty
Chris Peacock

27

Visual Basic, C # และ C ++ ทั้งหมดมีไวยากรณ์สำหรับการเข้าถึงคุณสมบัติรายการโดยไม่ต้องใช้ชื่อ แต่จะใช้ตัวแปรที่มีรายการแทนราวกับว่าเป็นอาร์เรย์

List[index]

ดูตัวอย่าง: https://msdn.microsoft.com/en-us/library/0ebtbkkc(v=vs.110).aspx


18

คำถามเก่า แต่ฉันเห็นว่าเธรดนี้ใช้งานได้ค่อนข้างเร็ว ๆ นี้ดังนั้นฉันจะไปข้างหน้าและโยนสองเซ็นต์ของฉัน:

สวยมากอย่างที่ Mitch พูด สมมติว่าการจัดทำดัชนีที่เหมาะสมคุณสามารถไปข้างหน้าและใช้สัญกรณ์วงเล็บเหลี่ยมราวกับว่าคุณกำลังเข้าถึงอาร์เรย์ นอกเหนือจากการใช้ดัชนีตัวเลขหากสมาชิกของคุณมีชื่อเฉพาะแล้วคุณยังสามารถค้นหา / เข้าถึงพร้อมกันได้โดยการพิมพ์ดังนี้:

var temp = list1["DesiredMember"];

ยิ่งคุณรู้ใช่มั้ย


0

Listโครงสร้างข้อมูล. NET คือArrayใน "เชลล์ที่ไม่แน่นอน"

ดังนั้นคุณสามารถใช้ดัชนีเพื่อเข้าถึงองค์ประกอบของมันเช่น:

var firstElement = myList[0];
var secondElement = myList[1];

เริ่มต้นด้วยC # 8.0คุณสามารถใช้IndexและRangeคลาสเพื่อเข้าถึงองค์ประกอบ พวกเขาให้การเข้าถึงจากจุดสิ้นสุดของลำดับหรือเพียงแค่เข้าถึงส่วนหนึ่งของลำดับ:

var lastElement = myList[^1]; // Using Index
var fiveElements = myList[2..7]; // Using Range, note that 7 is exclusive

คุณสามารถรวมดัชนีและช่วงเข้าด้วยกัน:

var elementsFromThirdToEnd = myList[2..^0]; // Index and Range together

นอกจากนี้คุณสามารถใช้ElementAtวิธีLINQ แต่สำหรับ 99% ของกรณีนี้ไม่จำเป็นจริงๆและเพียงแค่การแก้ปัญหาประสิทธิภาพช้า


0

คุณสามารถใช้ดัชนีเพื่อเข้าถึงองค์ประกอบรายการ

List<string> list1 = new List<string>();
list1[0] //for getting the first element of the list
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.