根据另一个列表中的相关值在c#中对列表进行排序 [英] Sorting a list in c# based on dependant values in another list
问题描述
我正在尝试根据另一个列表中出现的顺序对项目列表进行排序.
I'm trying to sort a list of items based on the order of the occurrence in another list.
下面是基本结构:
public class ItemList
{
public List<Item> items;
public ItemList(string myValue)
{
items = new List<Item>();
}
public void addItem (string myValue)
{
var newItem = new Item(myValue);
items.Add(newItem);
}
public class Item
{
public List<string> myLinkedValues;
public string myValue;
public Item(string myValue)
{
myLinkedValues = new List<string>();
}
public void addLinkedItem(string linkedItem)
{
myLinkedValues.Add(linkedItem);
}
}
}
因此,如果我的列表具有以下值(myValue和myLinkedValues):
So if my list had the following values (myValue and myLinkedValues):
A
C
B
A C
C
D
C B
我正在尝试对其进行排序,因此依赖值首先是这样的:
I'm trying to sort it so dependant values are first like this:
C
A
C
B
A C
D
C B
基本上,我的操作速度很慢,所以我想知道是否有更快的方法.
Basically the way I do it is quite slow, so I was wondering if there is some quicker way of doing this.
编辑,我的基础知识:
public void Sort()
{
var changed = true;
while (changed)
{
changed = false;
var sortedList = new List<Item>();
foreach (Item item in items)
{
var minimumPosition = -1;
var parents = Linked.FindAll(myList => myList.isLinked(item.myValue);
foreach (Item parent in parents)
{
var parentPosition = sortedList.IndexOf(parent);
if (minimumPosition == -1 || (parentPosition < minimumPosition && parentPosition != -1))
{
minimumPosition = parentPosition;
}
}
if (minimumPosition == -1)
{
sortedList.Add(item);
}
else
{
sortedList.Insert(minimumPosition, item);
changed = true;
}
}
items = sortedList;
}
}
public bool isLinked(string myValue)
{
var isLinked = false;
isLinked = items.Any(check => check == myValue;
return isLinked;
}
推荐答案
尝试此操作,如果我对您的要求有误,请对不起.
Try this and sorry if i have understood your requirement wrongly.
在下面将您视为具有字符串列表的从属集合.
Consider below as your dependent collection with list of string.
List<string> dependentCollection= new List<string>{ "A","B" "C", "D", "E","F","G"};
这是您的原始收藏集
List<string> myValues = new List<string>{"C","G","B","A"};
var sortedList= myValues.OrderBy(i => dependentCollection.IndexOf(i.ToString()));
输出如下所示,
A B C G
这篇关于根据另一个列表中的相关值在c#中对列表进行排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!