SortedSet 一问解决思路
SortedSet 一问
大家看看下面的code,觉得执行结果是什么?
如果你的答案是下面这个,麻烦帮忙解释以下。
Name:Tommy,Age:15
Name:Jeffrey,Age:21
Name:Tom,Age:25
Name:Tommy,Age:15
Name:Jeffrey,Age:21
Name:Tom,Age:25
Press any key to continue . . .
------解决方案--------------------
因为SortedSet不接受重复的元素,那元素是否重复呢?就是看你传入的IComparer,由于最先加到集合里的年龄为25的Person是Tom,所以以后再往里添加的元素都加不进去了。
你可以把persons.Add(new Person("Erosion", 25));改为
bool b = persons.Add(new Person("Erosion", 25));
输出b可以看到它的值为False。
大家看看下面的code,觉得执行结果是什么?
class Person
{
public string Name { get; set; }
public int Age { get; set; }
public Person(string name, int age)
{
Name = name;
Age = age;
}
public override string ToString()
{
return string.Format("Name:{0},Age:{1}", Name, Age);
}
}
class SortPersonByAge:IComparer<Person>
{
public int Compare(Person x, Person y)
{
if (x.Age > y.Age)
{
return 1;
}
else if(x.Age<y.Age)
{
return -1;
}
else
{
return 0;
}
}
}
SortedSet<Person> persons = new SortedSet<Person>(new SortPersonByAge())
{
new Person("Tom",25),
new Person("Tommy",15),
new Person("Jeffrey",21),
new Person("Oscar",25),
};
foreach (var person in persons)
{
Console.WriteLine(person.ToString());
}
persons.Add(new Person("Erosion", 25));
Console.WriteLine();
foreach (var person in persons)
{
Console.WriteLine(person.ToString());
}
如果你的答案是下面这个,麻烦帮忙解释以下。
Name:Tommy,Age:15
Name:Jeffrey,Age:21
Name:Tom,Age:25
Name:Tommy,Age:15
Name:Jeffrey,Age:21
Name:Tom,Age:25
Press any key to continue . . .
------解决方案--------------------
因为SortedSet不接受重复的元素,那元素是否重复呢?就是看你传入的IComparer,由于最先加到集合里的年龄为25的Person是Tom,所以以后再往里添加的元素都加不进去了。
你可以把persons.Add(new Person("Erosion", 25));改为
bool b = persons.Add(new Person("Erosion", 25));
输出b可以看到它的值为False。