【问题标题】:spliting data at specified index in two vertical columns在两个垂直列中拆分指定索引处的数据
【发布时间】:2014-03-05 21:54:07
【问题描述】:

我有 20 个整数数组 int[] numbers;

我想在两个 html 表格列中显示这些数字,例如,第一列应该在 11 数字处中断并在第二列继续呈现,例如

Numbers | Some other data
---------------------------
1    12 |  Some data a
2    13 |  Some data b
..   14 |  Some data c
10   15 |
11   16 |

我试过这样的

<table>
   <tr>
       <td>Numbers</td>
       <td>Some other data</td>
   </tr>
   <tr>
   @{
       int numberscounter= 0;
       foreach (var item in numbers){

          if (numberscounter< 11) { 
           numberscounter++;
          <tr>
             <td>@item.Number</td>
             <td>@item.SomeOtherData</td>
          </tr>
         }
         else {
            <tr>    
                <td>@item.Number</td>
                <td>@item.SomeOtherData</td>
            </tr>   
         }
       }
   }
   </tr>
</table>

【问题讨论】:

  • 上面的代码会渲染行,你想要列对吗?您可以考虑按要呈现对的顺序进行排序,或者使用索引进行呈现,然后将 10 添加到右侧列中项目的索引。您将始终拥有 20 件物品还是数量不等?
  • 如果你有 20 个,为什么要在 11 上拆分?似乎有点奇怪。如果在这种情况下itemforeach 循环中从1-11 上升的数字,为什么还要有numberscounter++
  • @Charlex 永远是 20。
  • @Adween,我错误地将 counter++ 放在了循环之外,现在已修复。
  • @user1765862 很好,我很高兴你修复了它。为什么不通过添加您的答案来完成这篇文章:)

标签: html .net asp.net-mvc razor


【解决方案1】:

这并不优雅,我仍然不明白您要做什么。例如,其他一些数据是什么以及您将如何显示它,但要获得您所追求的(只需将 11 处的数字分成 2 列),您可以执行以下操作:

删除不需要的数组并使用 for 循环执行以下操作

<table>
    <tr>
        <td colspan="2">Numbers</td>
        <td>Some other data</td>
    </tr>

    @for (int i = 1; i <= 11; i++){
        <tr>
            <td>@i.ToString()</td>
            <td>@(((i + 11) <= 20) ? (i + 11).ToString(): "")</td>
            <td>Some other data here (notsure how this is generated)</td>
        </tr>
    }
</table>

编辑 (在 cmets 之后):好的,所以您想使用未知对象中已有的数字并将它们保存在 2 个单独的列中....

这个怎么样

@{
    //These are my test values. you will need to edit them with your values
    int[] intarray = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
    var Below11 = intarray.Where(x => x <= 11).OrderBy(x => x).ToArray();
    var Above11 = intarray.Where(x => x > 11).OrderBy(x => x).ToArray();
}


<table>
    <tr>
        <td colspan="2">Numbers</td>
        <td>Some other data</td>
    </tr>

    @for (int i = 0; i <= Math.Max(Below11.Count(), Above11.Count()) - 1; i++)
    {
        <tr>
            <td>@(i < Below11.Count() ? Below11[i].ToString() : "")</td>
            <td>@(i < Above11.Count() ? Above11[i].ToString() : "")</td>
            <td>Someother data</td>
        </tr>
    }
</table>

【讨论】:

  • 感谢您抽出宝贵时间,但您似乎不理解我的意思。我不想生成这些数字,它们已经存储在属性数字中,我只想在数字 11 处打破它们并继续渲染,就像我在问题中描述的那样。
  • @user1765862 你能提供你正在迭代的对象吗,因为我认为它是一个整数数组......如果数字是对象中的属性,显然不是。
  • @user1765862 我进行了编辑以向您展示如何在预填充的数组上执行此操作。这更像是你的想法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-15
  • 1970-01-01
  • 2018-07-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多