按字母顺序对一个列表进行排序,对其他三个列表按相同顺序重新排序

时间:2019-07-28 18:59:42

标签: c# list sorting

List<string> listOfStudentsNames = new List<string>();
List<string> listOfStudentsHomeTown = new List<string>();
List<string> listOfStudentsFavoriteFood = new List<string>();
List<string> listOfStudentsFavoriteColor = new List<string>();

因此,在迷你应用程序中,用户输入学生的姓名,然后输入家乡,喜欢的食物和喜欢的颜色。因此,我的目标是在用户添加新学生后随时将列表中的名称按字母顺序排列。我可以正常使用的列表我知道如何按字母顺序获取列表。我的问题是,我需要根据姓名列表的排序方式来获取其他3个列表的故乡,喜爱的食物和颜色(又名学生姓名仍然与他们的故乡喜爱的食物和颜色一样)。我在想办法做到这一点时遇到了麻烦。

这是我设置排序列表按字母顺序排列的功能的方式 现在,它仅对名称进行排序,问题是我如何将其他三个列表排序为按字母顺序对名称进行排序

public static void SortListAlpabetically
        (List<string> listOfstudentsNames,
        List<string> listOfStudentsFavoriteFoods,
        List<string> listOfStudentsHomeTown,
        List<string> listOfStudentsFavoriteColor)
    {
        List<string> unSortedList = new List<string>(listOfstudentsNames);
        List<string> tempListOfStudentsFood = new List<string>(listOfStudentsFavoriteFoods);
        List<string> tempListHomeTown = new List<string>(listOfStudentsHomeTown);
        List<string> tempListFavColor = new List<string>(listOfStudentsFavoriteColor);

        unSortedList.Sort();

        for (int i = 0; i < unSortedList.Count; i++)
        {

            listOfstudentsNames[i] = unSortedList[i];
        }
    }

1 个答案:

答案 0 :(得分:0)

这可能会解决您的问题。我不知道您是要添加名称,还是要保持顺序,或者是否已经有名称,并且要在末尾对所有内容进行排序,以保持名称索引与其他信息索引之间的匹配。我编写了两个变体:

方法1(添加名称保留顺序):

我制作了BinaryInsert方法,该方法使用二进制搜索将名称插入正确的位置(这非常快),然后返回插入名称的位置。这是您最多插入其他信息的位置。

<TouchableWithoutFeedback onPress={Keyboard.dismiss} >
    <TextInput />
</TouchableWithoutFeedback>

方法2(将所有内容排序,最后保留名称索引和其他信息索引之间的匹配项):

        static void Main(string[] args)
        {
            AddStudent("Mike", "home1", "food1", "color1");
            AddStudent("Pete", "home2", "food2", "color2");
            AddStudent("Andrea", "home3", "food3", "color3");
            AddStudent("Zoey", "home4", "food4", "color4");
            AddStudent("Tom", "home5", "food5", "color5");
        }

        static List<string> listOfStudentsNames = new List<string>();
        static List<string> listOfStudentsHomeTown = new List<string>();
        static List<string> listOfStudentsFavoriteFood = new List<string>();
        static List<string> listOfStudentsFavoriteColor = new List<string>();

        public static void AddStudent(string name, string homeTown, string favFood, string favColor)
        {
            int namePos = BinaryInsert(listOfStudentsNames, name);
            listOfStudentsHomeTown.Insert(namePos, homeTown);
            listOfStudentsFavoriteFood.Insert(namePos, favFood);
            listOfStudentsFavoriteColor.Insert(namePos, favColor);
        }

        public static int BinaryInsert<T>(List<T> elements, T item) where T : IComparable
        {
            return BinaryInsertRescursive(elements, item, 0, elements.Count);
        }

        private static int BinaryInsertRescursive<T>(List<T> elements, T item, int startIndex, int finishIndex) where T : IComparable
        {
            if (startIndex == finishIndex)
            {
                elements.Insert(startIndex, item);
                return startIndex;
            }

            int pos = startIndex + (finishIndex - startIndex) / 2;

            if (item.CompareTo(elements[pos]) <= 0)
                finishIndex = pos;
            else
                startIndex = pos + 1;

            return BinaryInsertRescursive(elements, item, startIndex, finishIndex);
        }

我希望这会有所帮助。

相关问题