第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何在 C# 中對(duì) List<T> 進(jìn)行排序

如何在 C# 中對(duì) List<T> 進(jìn)行排序

C#
江戶川亂折騰 2023-08-13 15:35:05
我有一個(gè)List<Card>,我想對(duì)這些卡片進(jìn)行排序所以,我正在尋找一種方法來用不同的標(biāo)準(zhǔn)對(duì)它們進(jìn)行排序,比如他們的ID,他們的Name......public class Card : IComparer{    public string ID;    public string Name;    public int CompareId(object firstCard, object secondCard)     {        Card c1 = (Card)firstCard;        Card c2 = (Card)secondCard;        return c1.Id.CompareTo(c2.Id);    }}但隨后,Visual Studio 向我發(fā)送了一個(gè)錯(cuò)誤:'Card'不實(shí)現(xiàn)接口成員'IComparer<Card>.Compare(Card, Card)'
查看完整描述

4 回答

?
嚕嚕噠

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超7個(gè)贊

您可能希望讓您的類成為Comparable而不是Comparator

public class Card : IComparable<Card>

{

? ? public string ID;

? ? public string Name;


? ? public int CompareTo(Card other)?

? ? {

? ? ? ? if (null == other)

? ? ? ? ? ? return 1;


? ? ? ? // string.Compare is safe when Id is null?

? ? ? ? return string.Compare(this.Id, other.Id);

? ? }

}

然后


List<Card> myList = ...


myList.Sort();

編輯:如果您想要有多個(gè)標(biāo)準(zhǔn)可供選擇,則必須將多個(gè)比較器實(shí)現(xiàn)為單獨(dú)的類,例如


public sealed class CardByIdComparer : IComparer<Card>?

{

? ? public int Compare(Card x, Card y)?

? ? {

? ? ? ? if (object.ReferenceEquals(x, y))

? ? ? ? ? ? return 0;

? ? ? ? else if (null == x)

? ? ? ? ? ? return -1;

? ? ? ? else if (null == y)

? ? ? ? ? ? return 1;

? ? ? ? else

? ? ? ? ? ? return string.Compare(x.Id, y.Id);

? ? }

}

并在排序時(shí)提供所需的:


List<Card> myList = ...


myList.Sort(new CardByIdComparer());

編輯2:(受到消費(fèi)者圖書館的啟發(fā))。如果您想將多個(gè)比較器合并為一個(gè)(即使用comparer1, on tie -comparer2等)


public sealed class ComparerCombined<T> : IComparer<T> {

? private IComparer<T>[] m_Comparers;


? public ComparerCombined(params IComparer<T>[] comparers) {

? ? if (null == comparers)

? ? ? throw new ArgumentNullException(nameof(comparers));


? ? m_Comparers = comparers

? ? ? .Select(item => item == null ? Comparer<T>.Default : item)

? ? ? .Where(item => item != null)

? ? ? .Distinct()

? ? ? .ToArray();

? }


? public int Compare(T x, T y) {

? ? if (object.ReferenceEquals(x, y))

? ? ? return 0;

? ? else if (null == x)

? ? ? return -1;

? ? else if (null == y)

? ? ? return 1;


? ? foreach (var comparer in m_Comparers) {

? ? ? int result = comparer.Compare(x, y);


? ? ? if (result != 0)

? ? ? ? return result;

? ? }


? ? return 0;

? }

}

用法:


myList.Sort(new ComparerCombined(

? new CardByIdComparer(),? ?// Sort By Id

? new CardByNameComparer()? // On tie (equal Id's) sort by name

));


查看完整回答
反對(duì) 回復(fù) 2023-08-13
?
慕斯709654

TA貢獻(xiàn)1840條經(jīng)驗(yàn) 獲得超5個(gè)贊

最簡(jiǎn)單的方法你可以使用 Linq:

List<Card> objSortedList = objListObject.OrderBy(o=>o.ID).ToList();

或者

List<Card> objSortedList = objListObject.OrderByDescending(o=>o.ID).ToList();


查看完整回答
反對(duì) 回復(fù) 2023-08-13
?
不負(fù)相思意

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超10個(gè)贊

您需要實(shí)現(xiàn) IComparer


public int Compare(Card card1, Card card2)

{

   if (card1.ID > card2.ID)

      return 1; //move card1 up

   if (card2.ID  < card1.ID)

      return -1; //move card2 up

  return 0; //do nothing

}



查看完整回答
反對(duì) 回復(fù) 2023-08-13
?
慕絲7291255

TA貢獻(xiàn)1859條經(jīng)驗(yàn) 獲得超6個(gè)贊

IComparer<T>在此示例中,比較方法用于字符串IComparer<T>?,但您也可以將其用于 ID(int)。

using System;?

using System.Collections.Generic;?


class GFG : IComparer<string>?

{?

? ? public int Compare(string x, string y)?

? ? {?

? ? ? ? if (x == null || y == null)?

? ? ? ? {?

? ? ? ? ? ? return 0;?

? ? ? ? }?


? ? ? ? // "CompareTo()" method?

? ? ? ? return x.CompareTo(y);?


? ? }?

}?




public class geek?

{?

? ? public static void Main()?

? ? {?

? ? ? ? List<string> list1 = new List<string>();?


? ? ? ? // list elements?

? ? ? ? list1.Add("C++");?

? ? ? ? list1.Add("Java");?

? ? ? ? list1.Add("C");?

? ? ? ? list1.Add("Python");?

? ? ? ? list1.Add("HTML");?

? ? ? ? list1.Add("CSS");?

? ? ? ? list1.Add("Scala");?

? ? ? ? list1.Add("Ruby");?

? ? ? ? list1.Add("Perl");?


? ? ? ? int range = 4;?


? ? ? ? GFG gg = new GFG();?


? ? ? ? Console.WriteLine("\nSort a range with comparer:");?


? ? ? ? // sort the list within a??

? ? ? ? // range of index 1 to 4?

? ? ? ? // where range = 4?

? ? ? ? list1.Sort(1, range, gg);?


? ? ? ? Console.WriteLine("\nBinarySearch and Insert Dart");?


? ? ? ? // Binary Search and storing??

? ? ? ? // index value to "index"?

? ? ? ? int index = list1.BinarySearch(0, range,?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "Dart", gg);?


? ? ? ? if (index < 0)?

? ? ? ? {?

? ? ? ? ? ? list1.Insert(~index, "Dart");?

? ? ? ? ? ? range++;?

? ? ? ? }?


? ? }?



}?


查看完整回答
反對(duì) 回復(fù) 2023-08-13
  • 4 回答
  • 0 關(guān)注
  • 223 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)