SortedList<string, systemuser> Users = new SortedList<string, systemuser>();
Users.Add("username1",customobject);
Users.Add("username2",customobject);
Users.Add("username3",customobject);
我要做的是在列表中搜索特定密钥(即用户名)并返回列表中的下一个项目。如果我在列表的末尾,那么我需要在第一个位置返回该项目。
不确定如何解决这个问题,因为SortedList似乎没有公开索引属性。
我有:
foreach (KeyValuePair<string, systemuser> pair in Users)
{
if (pair.Key == lastAllocation)
{
// RETURN THE ITEM IMMEDIATELY AFTER THIS ONE
}
}
任何建议都表示赞赏!
答案 0 :(得分:2)
首先获取搜索元素的索引。然后获取必要的密钥(不要忘记模块%
)。最后访问所爱的人:))
SortedList<string, systemuser> Users = new SortedList<string, systemuser>();
Users.Add("username1",customobject);
Users.Add("username2",customobject);
Users.Add("username3",customobject);
var index = Users.IndexOfKey("username1"); // check not found if necessary
var nextItemKey = s.Keys[(index + 1) % Users.Count()];
var nextItemValue = Users.IndexOfKey(nextItemKey);
答案 1 :(得分:1)
SortedList包含执行此操作所需的方法。查看IndexOfKey
和GetByIndex
。
答案 2 :(得分:1)
您在寻找下一个项目(KeyValuePair),值还是索引?
bool returnNextItem = false;
foreach (KeyValuePair<string, systemuser> pair in Users)
{
if (returnNextItem)
return pair.Value;
if (pair.Key == lastAllocation)
returnNextItem = true;
}
答案 3 :(得分:0)
您可以使用IndexOfKey
在给定用户名列表中查找位置。
使用返回的索引,您可以返回下一个项目,或返回列表中的第一个项目。
var idx = Users.IndexOfKey("username2");
if (idx == (Users.Count - 1)){
return Users.First().Key;
}
else{
return Users.Keys[idx + 1];
//.net 4.5+ can Users.GetByIndex()
}
答案 4 :(得分:0)
当您致电foreach
时,您真正在做的是致电Users.GetEnumerator();
。
这是以下的语法糖:
KeyValuePair<String, Systemuser> pair;
IEnumerator<KeyValuePair<String, Systemuser>> enumerator = Users.GetEnumerator();
while (enumerator.MoveNext())
{
pair = enumerator.Current;
// your code in the foreach loop here
}
简单的解决方案是手动使用枚举器来做你想做的事。
KeyValuePair<String, Systemuser> getSomething(String lastAllocation)
{
IEnumerator<KeyValuePair<String, Systemuser>> enumerator = Users.GetEnumerator();
while (enumerator.MoveNext())
{
if (enumerator.Current.Key == lastAllocation)
{
enumerator.MoveNext();
return enumerator.Current; // null if not another
}
}
return null;
}
答案 5 :(得分:0)
你可以试试这个。如果没有匹配,不确定你想要什么,所以我们只是返回一个新的KeyValuePair; 还要确保使用System.Linq;所以你可以访问ElementAt扩展方法。
public static KeyValuePair<string, string> GetUserInfo(string username, SortedList<string, string> list)
{
int index = list.IndexOfKey(username);
if(index == -1)
{
return new KeyValuePair<string, string>();
}
index = index == (list.Count - 1) ? 0 : index + 1;
return list.ElementAt(index);
}
答案 6 :(得分:0)
作为参考,SortedList有2个核心参考,一个在System.Collections(较旧)和System.Collections.Generic。在处理System.Collections.SortedList时,我只能使用Microsoft文章中引用的迭代方法(https://msdn.microsoft.com/en-us/library/system.collections.sortedlist(v=vs.110).aspx)
这是myList是SortedList集合的循环。
for ( int i = 0; i < myList.Count; i++ ) {
Console.WriteLine( "\t{0}:\t{1}", myList.GetKey(i), myList.GetByIndex(i) );
}
戴夫