如何根据分隔符将数组列表分割成两个数组列表?

huangapple go评论159阅读模式
英文:

How do I split an array list into two array lists based on a delimiter?

问题

假设我有一个数组列表的数组列表:

  1. A = [2, 5, 6], [1, 6, 1], [], [7, 7], [4, 2], [9, 3]]

我想在其中数组列表的元素大小为0的索引处将它们分割,使其看起来像这样:

  1. x = [[2, 5, 6], [1, 6, 1]]
  2. y = [[7, 7], [4, 2], [9, 3]]

但无论我运行循环如何,结果都是这样的:

  1. for(int i = 0; i < A.size(); i++) {
  2. ArrayList temp= A.get(i);
  3. int size = temp.size();
  4. if(size != 0) {
  5. x.add(temp);
  6. }
  7. y.add(temp);
  8. }
  1. x = [[2, 5, 6], [1, 6, 1], [7, 7], [4, 2], [9, 3]]
  2. y = [[2, 5, 6], [1, 6, 1], [], [7, 7], [4, 2], [9, 3]]

有人可以帮我解决这个问题吗?

英文:

Suppose that I have an Array list of Array lists:

  1. A = [2, 5, 6], [1, 6, 1], [], [7, 7], [4, 2], [9, 3]]

and I want to split them at the index where the element of the array list has the size of 0 so that it will look like this

  1. x = [[2, 5, 6], [1, 6, 1]]
  2. y = [[7, 7], [4, 2], [9, 3]]

but whenever I run my loop it comes out like this:

  1. for(int i = 0; i < A.size(); i++) {
  2. ArrayList temp= A.get(i);
  3. int size = temp.size();
  4. if(size != 0) {
  5. x.add(temp);
  6. }
  7. y.add(temp);
  8. }
  1. x = [[2, 5, 6], [1, 6, 1], [7, 7], [4, 2], [9, 3]]
  2. y = [[2, 5, 6], [1, 6, 1], [], [7, 7], [4, 2], [9, 3]]

Can anyone please help me figure this out?

答案1

得分: 1

你的逻辑有问题。目前,你避免将空列表写入x;除此之外,你总是同时向xy写入数据。

你可以使用一个布尔值来指示数据必须写入哪个列表。一旦你看到一个大小为0的列表,就切换这个标志。

  1. boolean writeToX = true;
  2. for (int i = 0; i < A.size(); i++) {
  3. ArrayList temp = A.get(i);
  4. int size = temp.size();
  5. if (size == 0) {
  6. writeToX = false;
  7. continue;
  8. }
  9. if (writeToX) {
  10. x.add(temp);
  11. } else {
  12. y.add(temp);
  13. }
  14. }

附注:避免使用原始类型。

https://stackoverflow.com/questions/2770321/what-is-a-raw-type-and-why-shouldnt-we-use-it

英文:

You logic is off. Currently you are avoiding writing the empty list into x; other than that you always write to both x and y.

You can have a boolean to say which list the data must be written to. Once you see a list with size 0, switch the flag.

  1. boolean writeToX = true;
  2. for(int i = 0; i &lt; A.size(); i++) {
  3. ArrayList temp= A.get(i);
  4. int size = temp.size();
  5. if(size == 0) {
  6. writeToX = false;
  7. continue;
  8. }
  9. if (writeToX) {
  10. x.add(temp);
  11. } else {
  12. y.add(temp);
  13. }
  14. }

Sidenote: Avoid using raw types.

https://stackoverflow.com/questions/2770321/what-is-a-raw-type-and-why-shouldnt-we-use-it

答案2

得分: 1

你需要像这样跟踪目标数组:

  1. boolean addToX = true;
  2. for(ArrayList temp : A) {
  3. if(temp.isEmpty()) {
  4. addToX = false;
  5. } else if(addToX) {
  6. x.add(temp);
  7. } else {
  8. y.add(temp);
  9. }
  10. }
英文:

You need to keep track of the destination array like this:

  1. boolean addToX = true;
  2. for(ArrayList temp : A) {
  3. if(temp.isEmpty()) {
  4. addToX = false;
  5. } else if(addToX) {
  6. x.add(temp);
  7. } else {
  8. y.add(temp);
  9. }
  10. }

答案3

得分: 0

尝试这个,在代码中添加一个布尔标志来标识:

  1. boolean flag = false;
  2. for (int i = 0; i < A.size(); i++) {
  3. ArrayList temp = A.get(i);
  4. int size = temp.size();
  5. if (size != 0 && flag == false) {
  6. x.add(temp);
  7. } else if (size == 0) {
  8. flag = true;
  9. } else if (size != 0 && flag == true) {
  10. y.add(temp);
  11. }
  12. }
英文:

Try this, add a boolen flag to identify :-

  1. boolean flag=false;
  2. for(int i = 0; i &lt; A.size(); i++) {
  3. ArrayList temp= A.get(i);
  4. int size = temp.size();
  5. if(size != 0 &amp;&amp; flag==false) {
  6. x.add(temp);
  7. }else if(size==0) {
  8. flag=true;
  9. }else if(size != 0 &amp;&amp; flag==true){
  10. y.add(temp);
  11. }

答案4

得分: 0

这是正常的,因为你只是没有将空元素放入 x,但你将所有其他元素都放入了 x 和 y。你可以有一个名为 isNullArrayCome 的布尔参数,在每次迭代时检查它。这里是代码示例:

  1. boolean isNullArrayCome = false;
  2. for (int i = 0; i < A.size(); i++) {
  3. ArrayList temp = A.get(i);
  4. int size = temp.size();
  5. if (size == 0) {
  6. isNullArrayCome = true;
  7. }
  8. if (!isNullArrayCome) {
  9. x.add(temp);
  10. } else {
  11. y.add(temp);
  12. }
  13. }
英文:

it is normal because you are just not putting the empty element to x but you are putting all other elements to x and y. You can have a boolean parameter, such as isNullArrayCome and check it on every iteration. Here it is

  1. boolean isNullArrayCome = false;
  2. for(int i = 0; i &lt; A.size(); i++) {
  3. ArrayList temp= A.get(i);
  4. int size = temp.size();
  5. if(size == 0 ) {
  6. isNullArrayCome = true;
  7. }
  8. if(!isNullArrayCome){
  9. x.add(temp);
  10. } else {
  11. y.add(temp);
  12. }
  13. }

huangapple
  • 本文由 发表于 2020年10月23日 16:07:44
  • 转载请务必保留本文链接:https://go.coder-hub.com/64496250.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定