Saya punya daftar dengan beberapa pengidentifikasi seperti ini:
List<long> docIds = new List<long>() { 6, 1, 4, 7, 2 };
Selain itu, saya memiliki daftar <T>
item lain, yang diwakili oleh id yang dijelaskan di atas.
List<T> docs = GetDocsFromDb(...)
Saya perlu menjaga urutan yang sama di kedua koleksi, sehingga barang-barang di List<T>
harus di posisi yang sama daripada yang pertama (karena alasan penilaian mesin pencari). Dan proses ini tidak dapat dilakukan dalam GetDocsFromDb()
fungsi.
Jika perlu, dimungkinkan untuk mengubah daftar kedua menjadi beberapa struktur lain ( Dictionary<long, T>
misalnya), tetapi saya lebih suka untuk tidak mengubahnya.
Apakah ada cara sederhana dan efisien untuk melakukan ini "ordenation tergantung pada beberapa ID" dengan LINQ?
c#
linq
sorting
collections
Borja López
sumber
sumber
docId
terjadi tepat sekali dalamdocs
, properti apa yang akan dimilikiId
atau akanFunc<T, long>
diperlukan pemilih ?Jawaban:
sumber
Id
. Tidak ditentukan dalam pertanyaan.IndexOf
sangat dapat diterima untuk contoh Anda dan bagus dan sederhana. Jika Anda memiliki banyak data, jawaban saya mungkin lebih cocok. stackoverflow.com/questions/3663014/…Karena Anda tidak menentukan
T
,Merupakan ekstensi generik untuk apa yang Anda inginkan.
Anda dapat menggunakan ekstensi seperti ini mungkin,
Versi yang lebih aman mungkin
yang akan bekerja jika
source
tidak zip persis denganorder
.sumber
Jawaban Jodrell adalah yang terbaik, tetapi sebenarnya dia menerapkan kembali
System.Linq.Enumerable.Join
. Bergabunglah juga menggunakan Pencarian dan terus memesan sumber.sumber
Salah satu pendekatan sederhana adalah melakukan zip dengan urutan pemesanan:
sumber
Zip
menggabungkan setiap indeks (ke dalam Tuple) dengan dokumen di posisi yang sama dalam daftar yang sesuai. Kemudian OrderBy mengurutkan Tuples berdasarkan bagian indeks dan kemudian pilih menggali dokumen kami hanya dari daftar sekarang dipesan.Item1
tidak terkaitItem2
.