首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按列的内容对矩阵或2d数组进行排序

按列的内容对矩阵或2d数组进行排序
EN

Stack Overflow用户
提问于 2015-10-24 20:18:05
回答 3查看 629关注 0票数 0

我在寻找代码方面的一些帮助,以便按一列的内容对矩阵内容进行排序,但保留同一行的数据.我将尝试举一个例子:

最初的矩阵是:

  • 1-玛莎- 12321 - 18
  • 2-亚当- 54345 - 22
  • 6月3日- 76577 - 12
  • 4-托马斯- 23454 - 16
  • 5彼得- 62356 - 24

如您所见,第一列是位置,第二列是名称,第三列是假想的ID,第四列是人的年龄。

这是一个字符串数组,所以使用String.valueOf(数字)转换数值数据;

现在,我希望获得代码方面的帮助,以便按任何列的内容对每一行进行排序。

例如,按names列排序的行应该如下所示:

  • 2-亚当- 54345 - 22
  • 6月3日- 76577 - 12
  • 1-玛莎- 12321 - 18
  • 5彼得- 62356 - 24
  • 4-托马斯- 23454 - 16

现在,按ID列排序的行应该如下所示:

  • 1-玛莎- 12321 - 18
  • 4-托马斯- 23454 - 16
  • 2-亚当- 54345 - 22
  • 5彼得- 62356 - 24
  • 6月3日- 76577 - 12

如您所见,整个行已被移动,而不仅仅是单个列中的项。

有人能帮我吗?提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-10-24 22:32:22

这里有一个使用比较器和集合的快速解决方案。一切都应该是不言自明的。每个字段都是一个字符串,但您也可以轻松地使用整数。希望你觉得有用。

代码语言:javascript
复制
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class MatrixCompare {

    public static void main(String[] args) {

        List<Contact> contacts = new ArrayList<Contact>();
        contacts.add(new Contact("1", "John", "456456", "35"));
        contacts.add(new Contact("2", "Jack", "123123", "20"));
        contacts.add(new Contact("3", "Mary", "234234", "24"));
        contacts.add(new Contact("4", "Jane", "345345", "18"));

        System.out.println("Initial List\n");
        printContacts(contacts);

        System.out.println("\n\nSorted by Id\n");
        Collections.sort(contacts, new SortById());
        printContacts(contacts);

        System.out.println("\n\nSorted by Name\n");
        Collections.sort(contacts, new SortByName());
        printContacts(contacts);

        System.out.println("\n\nSorted by Person Id\n");
        Collections.sort(contacts, new SortByPersonId());
        printContacts(contacts);

        System.out.println("\n\nSorted by Age\n");
        Collections.sort(contacts, new SortByAge());
        printContacts(contacts);

    }

    private static void printContacts(List<Contact> contacts) {
        for (int i=0; i<contacts.size(); i++) {
            System.out.println(contacts.get(i).id + " - " + contacts.get(i).name + " - " + 
                    contacts.get(i).getPersonId() + " - " + contacts.get(i).getAge());
        }
    }

    private static class Contact {

        String id;
        String name;
        String personId;
        String age;

        public Contact(String id, String name, String personId, String age) {
            this.id = id;
            this.name = name;
            this.personId = personId;
            this.age = age;
        }

        public String getId() {
            return id;
        }

        public String getName() {
            return name;
        }

        public String getPersonId() {
            return personId;
        }

        public String getAge() {
            return age;
        }

    }

    private static class SortById implements Comparator<Contact> {
        @Override
        public int compare(Contact o1, Contact o2) {
            String name1 = o1.getId();
            String name2 = o2.getId();  
            return name1.compareTo(name2);
        }
    }
    private static class SortByName implements Comparator<Contact> {
        @Override
        public int compare(Contact o1, Contact o2) {
            String name1 = o1.getName();
            String name2 = o2.getName();    
            return name1.compareTo(name2);
        }
    }
    private static class SortByPersonId implements Comparator<Contact> {
        @Override
        public int compare(Contact o1, Contact o2) {
            String name1 = o1.getPersonId();
            String name2 = o2.getPersonId();    
            return name1.compareTo(name2);
        }
    }
    private static class SortByAge implements Comparator<Contact> {
        @Override
        public int compare(Contact o1, Contact o2) {
            String name1 = o1.getAge();
            String name2 = o2.getAge(); 
            return name1.compareTo(name2);
        }
    }

}
票数 1
EN

Stack Overflow用户

发布于 2015-10-24 20:23:12

由于2D数组实际上是数组的数组,所以可以使用自定义Comparator通过调用Arrays.sort(array, comparator)对外部数组进行排序。

票数 0
EN

Stack Overflow用户

发布于 2015-10-24 23:03:54

在c#中,您可以为特定类型的数组建立模型,然后可以使用lambda对其进行排序。

Exp.OrderBy(p=> p.Name)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33322874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档