Arrayning muayyan elementini oxirigacha joylashtiring

Alifbo sifatida bu kabi tartiblangan ma'lumotlar bazasidan keladigan qator bor:

["Algebra", "Boshqalar", "Fizika"].

Endi ComboBox ni joylashtirayotganimda, "Boshqa" so'zini qator oxirida joylashtiraman. Bunga qanday erishish mumkinligi haqida har qanday fikr bormi? Shunday qilib, qator shunday bo'lar edi:

["Algebra", "Fizika", "Boshqalar"].

2
Uhm ... boshlang'ich qatordan "Boshqalar" ni filtriga keltiring va natijada olingan qator oxirida "Boshqalarni" qo'shing?
qo'shib qo'ydi muallif KarelG, manba
Faqat Others parametrini tartiblashdan keyin qo'shing.
qo'shib qo'ydi muallif Karthik, manba
Ma'lumotlar bazasi sizning kombinatsiyangizga qanday bog'liq? Iltimos nimaga harakat qilayotganingizni ko'rish uchun ba'zi kodni yozing va aslida nima sodir bo'ladi.
qo'shib qo'ydi muallif Ori Nachum, manba

6 javoblar

Qanday Linq OrderBy foydalanish haqida.

var arr = new[] { "Algebra", "Others", "Physics" };
arr = arr.OrderBy(e => e == "Others").ToArray();
3
qo'shib qo'ydi
Yep. Bu qadar oddiy.
qo'shib qo'ydi muallif Gert Arnold, manba
Chunki OrderBy "barqaror" (MSDN-da yozilgan) bo'lishi kafolatlanadi, shuning uchun "boshqalar" elementlari tartibida tartiblash oxirida bir xil bo'ladi.
qo'shib qo'ydi muallif xanatos, manba

"Combobox" ni joylashtirgandan so'ng, "boshqalar" ni qo'shing

comboBox1.Items.Remove("OTHERS");
comboBox1.Items.Add("OTHERS");
3
qo'shib qo'ydi
Men savolni yangiladim. Jadval ma'lumotlar bazasidan keladi. :)
qo'shib qo'ydi muallif klaydze, manba
Combo qutisini joylashtiring, "Boshqalar" ni olib tashlang va "Boshqalar" ni qo'shing, kodni yangiladim
qo'shib qo'ydi muallif imsome1, manba

Others has an exception in your items and you know that. so just code it

if (items.Contains("Others"))
{
    items.Remove("Others");
}
items.Add("Others");//place this inside if statement if `Others` should not be added 
                    //and can only be moved to end of array.
2
qo'shib qo'ydi

Bunga nima deysan:

string[] str = {"Algebra", "Others", "Physics"};
var list = str.Where(c => c != "Others").OrderBy(c => c).ToList();
list.Add("Others");
1
qo'shib qo'ydi

Men boshqalar tomonidan tavsiya etilgan echimdan foydalanishni istasam (faqat oxirida "Boshqalar" ni qo'shing), agar siz chindan ham qatorni tartiblashtirishni xohlasangiz:

var arr = new[] { "Algebra", "Others", "Physics" };

Array.Sort(arr, (p, q) => {
    if (p == "Others") {
        return q == "Others" ? 0 : 1;
    }

    if (q == "Others") {
        return -1;
    }

    return StringComparer.CurrentCulture.Compare(p, q);
});

("Boshqalar" ni maxsus usul bilan ishlaydigan va uni "eng katta" qator deb hisoblaymiz)

1
qo'shib qo'ydi
Bu hozirgacha eng yaxshi yechim. Tekshiruvni nashr qilishdan oldin uni tartiblashtirish kerak.
qo'shib qo'ydi muallif Philipp Müller, manba

Siz o'zingizning qatoringizdagi "boshqalarni" qo'l bilan qo'yasizmi?

string[] list = { "Algebra", "Physics", "Others" };
comboBox1.Items.AddRange(list);

enter image description here

0
qo'shib qo'ydi
OP o'laroq ma'lumotlar bazasidan kelib chiqadi va alifbo tartibida tartiblanganligini bildiradi, shuning uchun qo'lni qo'l bilan yaratish variant sifatida ko'rinmaydi.
qo'shib qo'ydi muallif Enigmativity, manba
Adolatli. Odamlar o'z savollarini tartibga solib, mavjud javoblarni bekor qilishlari uchun meni yoqtirmaydi. Bunday o'zgarishlarni qo'shib qo'yish kerak.
qo'shib qo'ydi muallif Enigmativity, manba
@Enligmatite rahmat. Ma'lumotlar bazasidan keladigan bittagina mening javobimga yozganimda uning postida emas edi! Ish bilan shug'ullanadigan javoblar yangilanganligi sababli, mening ishimni yangilab bo'lmaydi. :)
qo'shib qo'ydi muallif Rawns, manba