2 개의 문자열과 1 개의 double (양)이있는 클래스가 있습니다.사용자 정의 클래스 배열을 정렬하려면 어떻게합니까?
클래스 기부자
- 문자열 이름
- 문자열 코멘트
- 이중 양
지금은 기부자의 배열이 가득 차 있습니다.
금액으로 어떻게 정렬 할 수 있습니까?
2 개의 문자열과 1 개의 double (양)이있는 클래스가 있습니다.사용자 정의 클래스 배열을 정렬하려면 어떻게합니까?
클래스 기부자
지금은 기부자의 배열이 가득 차 있습니다.
금액으로 어떻게 정렬 할 수 있습니까?
당신은 이런 식으로 작업을 수행 할 수 있습니다
public class Donator :IComparable<Donator>
{
public string name { get; set; }
public string comment { get; set; }
public double amount { get; set; }
public int CompareTo(Donator other)
{
return amount.CompareTo(other.amount);
}
}
그런 다음, 종류에 당신이 원하는대로 호출 할 수 있습니다
말 :
var donors = new List<Donator>();
//add donors
donors.Sort();
.Sort()
은 당신이 구현 CompareTo()
메소드를 호출 정렬. 내가 MyList.Sort
MyList.Sort(delegate (Donator a, Donator b) {
if (a.Amount < b.Amount) return -1;
else if (a.Amount > b.Amount) return 1;
else return 0;);
IComparer를 구현하는 클래스가 더 나은 방법 일 것입니다. – eschneider
@eschneider - 이것은 거의 항상 간단한 일입니다. 그게 "더 나은"것이 어때? –
다양한 방법으로 정렬해야 할 가능성이 있습니다. DonorAmountComparer, DonorLastNameComparer, DonorAmountThenLastNameComparer. – eschneider
IComparable
을 구현 한 다음 Array.Sort
을 사용하십시오.
public class Donator : IComparable {
public string name;
public string comment;
public double amount;
public int CompareTo(object obj) {
// throws invalid cast exception if not of type Donator
Donator otherDonator = (Donator) obj;
return this.amount.CompareTo(otherDonator.amount);
}
}
Donator[] donators; // this is your array
Array.Sort(donators); // after this donators is sorted
람다 식을 전달할 수도 있습니다. 새로운 클래스 –
을 만들려고 시도했지만, 실제로 어떻게 정렬합니까? – Kovu
.Net 2.0에는 없습니다. 그는 할 수 없습니다. – AxelEckenberger
당신은 당신이의 System.Linq 네임 스페이스를 포함 시켰 제공 MyArray.OrderBy(n => n.Amount)
를 사용할 수 있습니다. 당신이 IComparable<Donator>
을 구현하는 경우
myArray = myArray.orderby ... 시도했습니다 : 오류 : Fehler "DongleDonatorSite.Donator []"ist nicht möglich에서 "System.Linq.IOrderedEnumerable
.ToArray()를 사용하여 열거 형을 배열로 되돌릴 수 있습니다. –
끝에'.ToArray()'를 추가하거나 결과를 할당 할 변수의 유형을 변경하고자 할 수 있습니다. 그런데 대부분의 경우 배열 사용을 중단하고 일반 목록을 사용하는 것이 더 실용적이지만 성능이 문제가되지는 않습니다. –
난 항상 일반적인 목록을 사용
또한 IComparable<T>
없이 람다 대안있다 delegates :
class Program
{
static void Main(string[] args)
{
List<Donor> myDonors = new List<Donor>();
// add stuff to your myDonors list...
myDonors.Sort(delegate(Donor x, Donor y) { return x.amount.CompareTo(y.amount); });
}
}
class Donor
{
public string name;
public string comment;
public double amount;
}
a.Amount.CompareTo (b.Amount) – Ruben
과 동일합니다. 또한, 내 방법을 사용하면 금액을 기준으로 정렬하고, 이름이 같은지 등의 추가 논리를 추가 할 수 있습니다. CompareTo는이 경우에 더 간단하며, 내 예제는보다 흥미로운 정렬이 필요한 경우에만 유용합니다 논리. –
물결 모양이없는 것 같습니다. –
당신이 할 수있는 전화
List<Donator> MyList;
다음 예를 들어,
var donors = new List<Donator>();
//add donors
donors.Sort((a, b) => a.amount.CompareTo(b.amount));
여기에 인터페이스를 구현하지 않고도 정렬이 있습니다. 이것은 일반 목록 또 다른 방법은 IComparer를 구현하는 클래스를 만드는 것입니다
List<Donator> list = new List<Donator>();
Donator don = new Donator("first", "works", 98.0);
list.Add(don);
don = new Donator("first", "works", 100.0);
list.Add(don);
don = new Donator("middle", "Yay", 101.1);
list.Add(don);
don = new Donator("last", "Last one", 99.9);
list.Add(don);
list.Sort(delegate(Donator d1, Donator d2){ return d1.amount.CompareTo(d2.amount); });
을 사용하고, 후 비교 자 클래스에 전달하는 과부하가있다.
http://msdn.microsoft.com/en-us/library/8ehhxeaf.aspx
이 방법 당신은 필요한 각각의 특정 종류의 서로 다른 클래스를 가질 수있다. 이름, 금액 또는 다른 이름으로 정렬 할 수 있습니다.
@Jeff 오, 그는 확실히 'IndividualHumanBeingWhoDonated'를 사용하고 싶습니다. –
기부자는 도넛의 감정가입니다. – DRBlaise
중복 : http://stackoverflow.com/questions/1301822/how-to-sort-an-array-of-object-by-a-specific-field-in-c http://stackoverflow.com/questions/ 1812044/how-to-sort-an-object-in-visual-c http : // stackoverflow.com/questions/1211617/sort-an-array of-strong-typed-object-of-the-object-of-the-object-c –