Mendapatkan item daftar berdasarkan indeks


321

Saya baru-baru ini mulai menggunakan c # pindah dari Jawa. Sepertinya saya tidak dapat menemukan cara mendapatkan item daftar berdasarkan indeks. Di java untuk mendapatkan item pertama dari daftar itu adalah:

list1.get(0);

Apa yang setara dalam c #?


4
Lihat stackoverflow.com/questions/5326874/... untuk beberapa diskusi mengenai apakah akan menggunakan operator [] atau metode ElementAt ().
ngm

Jawaban:


362
list1[0];

Mengasumsikan tipe daftar memiliki pengindeks ditentukan.


5
Satu-satunya jawaban yang menjelaskan mengapa mungkin untuk mengakses daftar, yang merupakan objek, seperti array
PrashanD

Apakah itu mengembalikan salinan objek dalam daftar? obj = daftar [0]; list.clear (); // akankah obj masih diisi?
Paul McCarthy

1
@ Paul McCarthy: Anda bisa dengan mudah mengujinya sendiri, tapi Ya. Daftar menyimpan referensi ke objek. Mengosongkan daftar tidak mempengaruhi objek yang ada di dalamnya. Jika tidak ada referensi lain untuk benda-benda itu, mereka akan menjadi sampah yang dikumpulkan pada suatu titik waktu.
Mitch Wheat

242

Anda bisa menggunakan metode ekstensi ElementAt pada daftar.

Sebagai contoh:

// 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
Hanya untuk mencatat bahwa ElementAt () membutuhkan using System.Linq;.
ngm

16
Apakah ada keuntungan untuk ini daripada myList[0]notasi standar ?
AnalogWeapon

5
"Mengapa saya menggunakan Enumerable.ElementAt () versus operator []?" stackoverflow.com/questions/5326874/...
Lavande

3
.ElementAtOrDefault();
amit jha

@ AmnalogWeapon ya ada - Anda dapat menggunakannya sebagai bagian dari rantai pengaman nol, misalnya myCollectionWhichMightBeNull?.ElementAt(0)atau untuk melindungi elemen yang tidak ada:myCollection.ElementAtOrDefault(0)?.SomeProperty
Chris Peacock


18

Pertanyaan lama, tetapi saya melihat bahwa utas ini cukup baru-baru ini aktif, jadi saya akan melanjutkan dan melemparkan dua sen saya:

Persis seperti yang dikatakan Mitch. Dengan asumsi pengindeksan yang tepat, Anda bisa melanjutkan dan menggunakan notasi braket persegi seolah-olah Anda mengakses array. Selain menggunakan indeks numerik, jika anggota Anda memiliki nama tertentu, Anda dapat sering melakukan pencarian / akses simultan dengan mengetikkan sesuatu seperti:

var temp = list1["DesiredMember"];

Semakin banyak Anda tahu, bukan?


0

ListStruktur data .NET adalah Arraydalam "shell yang bisa berubah-ubah".

Jadi Anda dapat menggunakan indeks untuk mengakses elemen-elemennya seperti:

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

Dimulai dengan C # 8.0 yang dapat Anda gunakan Indexdan Rangekelas untuk mengakses elemen. Mereka menyediakan pengaksesan dari akhir urutan atau hanya mengakses bagian tertentu dari urutan:

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

Anda dapat menggabungkan indeks dan rentang bersama-sama:

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

Anda juga dapat menggunakan ElementAtmetode LINQ tetapi untuk 99% kasus ini benar-benar tidak perlu dan hanya solusi kinerja yang lambat.


0

Anda dapat menggunakan indeks untuk mengakses elemen daftar

List<string> list1 = new List<string>();
list1[0] //for getting the first element of the list
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.