3

最大4つの列に分割する動的な数のアイテムがあり、その周りに適切なhtml形式があります。

string[] s = { "1", "2", "3", "4", "5", "6", "7", "8", "9" }; // from 1 to n itens

このhtmlにフォーマットするには:

<ul>
  <li>
     1
     2
     3
  </li>
  <li>
     4
     5
  </li>
  <li>
     6
     7
  </li>
  <li>
     8
     9
  </li>
</ul>

編集:私のウェブサイトの問題:

itensとして単語がある場合、itensをこのように配置すると、単語はアルファベット順の行ではなく、アルファベット順の列(人々はこのように読みます)に編成されます。好き:

a d g i
b e h j
c f 

それ以外の:

a b c d
e f g h
i j
4

3 に答える 3

5

余りを均等に分配したい場合、これで次のことができます。

string[] s = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };

// create the 4 buckets with equal distribution
var buckets = Enumerable.Repeat(s.Length / 4, 4).ToArray();

// distribute any remainders evenly starting from the first bucket
var rem = s.Length % 4; 
for (var i = 0; i < rem; i++) buckets[i]++;

var idx = 0;
Console.WriteLine("<ul>");
foreach (var bucket in buckets)
{
    Console.WriteLine("\t<li>");
    foreach (var _ in Enumerable.Range(1, bucket))
    {
        Console.WriteLine("\t\t{0}", s[idx++]);
    }
    Console.WriteLine("\t</li>");
}
Console.WriteLine("</ul>");

上記のコードの場合、いくつかのエッジケースが返すものは次のとおりです。

{}=リスト内の4つの空のアイテム

{ "1", "2", "3"}=最初の3つのアイテムで1、2、3、4番目のアイテムは空

{ "1", "2", "3", "4", "5"}=最初の項目で1、2、他の項目で3、4、5

于 2012-05-30T21:52:12.597 に答える
1

配列をループして、配列アイテムをいくつかのifステートメントとともに分散します。

int j = 0;

for (int i = 0; i < s.Length; i++)
{
    if (j == 0)
      // put s[i] in column 1 j = j +1
    else if (j == 1)
      // put s[i] in column 2 j = j +1
    else if (j == 2)
      // put s[i] in column 3 j = j +1
    if (j == 3)
      // put s[i] in column 4 set j = 0
}
于 2012-05-30T21:46:04.663 に答える
1

行ではなく列でグループ化する必要があるため、最終的にはインデックスを使用して何かを行う必要があることに注意してください。これを行う最も簡単な方法は、アイテムをアイテム/インデックスのペアに変換し、それらのインデックスで何らかの方法でグループ化することです。

s.Select((tr, ti) => new { Index = ti, Item = tr })
 .GroupBy(tr => tr.Index % SOME_MAGIC_NUMBER)

代わりに行でグループ化する場合は、%演算子を除算に変更する/と設定されます。これで、すべてのアイテムが取得され、(行または列のいずれかに基づいて)指定した数のアイテムにグループ化されます。それらを変換するには、別の選択を行う必要があります。

.Select(tr => "<li>" + string.Join(" ", tr.Select(tstr => tstr.Item.ToString()).ToArray()) + "</li>")

これにより、すべてのリストアイテムのリストが任意の形式で取得されます。<br />それぞれの要素の間に含める場合は、呼び出し<li>の最初の引数を変更するだけです。string.Join

于 2012-05-30T21:57:41.097 に答える