首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何遍历整数列表并保存连续值的起止位置

如何遍历整数列表并保存连续值的起止位置
EN

Stack Overflow用户
提问于 2017-10-14 02:16:11
回答 3查看 101关注 0票数 0

我试图遍历一个大小为1024的整数列表,其中的值的结构类似于{0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,1,1,1,1,1,1,1....}.

在遍历列表时,我创建了一个对象,该对象将值与起始索引位置和结束位置一起保存。

例如,上面的结构将拉出3个对象。

第一个对象包含值0,起始位置为0,结束位置为8。

第二个对象包含值3,起始位置为9,结束位置为15,依此类推。我已经在这方面做了很长时间了,我正在努力解决这个问题。

EN

回答 3

Stack Overflow用户

发布于 2017-10-14 02:20:39

在遍历列表时,我创建了一个对象,该对象将值与起始索引位置和结束位置一起保存。

只需遍历列表并在此过程中将新对象添加到另一个列表:

代码语言:javascript
复制
ArrayList<MyObject> newList = new ArrayList<MyObject>();

for(Integer i : intList){
    int start = ...;      //your calculation to derive start
    int end = ...;        //your calculation to derive end
    int value = ...;      //your calculation to derive value
    newList.add(new MyObject(start, end, value));
}
票数 0
EN

Stack Overflow用户

发布于 2017-10-14 02:40:16

您要做的是跟踪您所在的值,当在列表中看到新值时,创建对象,然后重新初始化值。这是一个你应该能够应用于你的问题的例子-

代码语言:javascript
复制
int list[] = {0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,1,1,1,1,1,1,1};
int currentVal = list[0];
int start = 0;
int end = -1;

for(int index = 1; index < list.length; index++)
{
    if(currentVal != list[index])
    {
        end = index - 1;
        System.out.println("New Object is S: " + start + ", End: " + end + ", Val: " + currentVal);
        // create the object here PositionHelper obj = new PositionHelper(start, index - 1, currentVal);
        currentVal = list[index];
        start = index;
    }
}

System.out.println("New Object is S: " + start + ", End: " + (list.length - 1) + ", Val: " + currentVal);
// create the object here PositionHelper obj = new PositionHelper(start, index - 1, currentVal);

输出

代码语言:javascript
复制
  New Object is S: 0, End: 8, Val: 0
  New Object is S: 9, End: 15, Val: 3
  New Object is S: 16, End: 22, Val: 1

备注

您想要说明列表中的最后一个对象,但直到您退出for循环才会知道,因此最后一条语句说明了这一点。您还可以在for循环中添加另一个if check来检查最后一个循环的末尾。经销商的选择!祝好运!

票数 0
EN

Stack Overflow用户

发布于 2017-10-14 02:44:43

代码语言:javascript
复制
public class Test {
  static class MyObject {
    private int begin;
    private int end;
    private int number;

    public MyObject(int begin, int end, int number) {
      this.begin = begin;
      this.end = end;
      this.number = number;
    }

    public String toString() {
      return "[begin: " + begin + ", end: " + end + ", number: " + number + "]";
    }

    //getters, setters
  }

  public static List<MyObject> traverse(int ... integers) {
    List<MyObject> result = new ArrayList<>();
    if(integers.length == 0) {
      return result;
    }
    int number = integers[0];
    int begin = 0;
    for (int i = 1; i < integers.length; i++) {
      int current = integers[i];
      if(current != number) {
        result.add(new MyObject(begin, i-1, number));
        begin = i;
        number = current;
      }
    }
    result.add(new MyObject(begin, integers.length -1, number));
    return result;
  }

  public static void main(String[] args) {
    List<MyObject> result = traverse(0,0,0,1,1,15);
    System.out.println(result);
  }
}

输出为:

[开始: 0,结束: 2,数字: 0,开始: 3,结束: 4,数字: 1,开始: 5,结束: 5,数字: 15]

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

https://stackoverflow.com/questions/46735831

复制
相关文章

相似问题

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