Итерация массива [дубликат]

Возможно, это будет полезно

<select>
    <option disabled selected value> -- select an option -- </option>
    <option>Option 1</option>
    <option>Option 2</option>
    <option>Option 3</option>
</select>

-- select an option -- Будет отображаться по умолчанию. Но если вы выберете вариант, вы не сможете его выбрать.

Вы также можете скрыть его, добавив пустой option

<option style="display:none">

, чтобы он больше не отображался в списке.

3
задан wkl 22 November 2010 в 23:40
поделиться

8 ответов

for(int j=0; j < list.length; j++){
    int idx = (j + i) % list.length;
    sb.AppendFormat("{0} " , list[idx]);
}

В основном, как решение Brent Arias, но я думаю, что цикл for более читабельен, менее вероятно, что он будет бесконечным.

    public static string zee(string origString, int i)
    {
        StringBuilder sb = new StringBuilder();

        List<string> list = new List<string>();
        list.AddRange(origString.Split(' '));

        for (int j = 0; j < list.Count; j++)
        {
            int idx = (j + i) % list.Count;
            sb.AppendFormat("{0} ", list[idx]);
        }
        return sb.ToString();
    }
5
ответ дан VoodooChild 18 August 2018 в 19:25
поделиться
static string rearrange(string phase,int index)
{
    string[] words = phase.Split(' ');
    string[] newwords = new string[words.Length];

    int pointer = index;
    for (int i = 0; i < words.Length;i++ )
    {
        if(pointer>=words.Length)
        {
            pointer = 0;
        }
        newwords[i] = words[pointer];
        pointer++;
    }

    return string.Join(" ", newwords);
}
0
ответ дан akjoshi 18 August 2018 в 19:25
поделиться

Вот как я его решаю.

    private static string f(string s, int start)
    {
        var arr=s.Split(' ');
        start %= arr.Length;

        var res=arr.Skip(arr.Length - start).ToList();
        res.AddRange(arr.Take(arr.Length - start));
        return string.Join(" ", res);
    }

Я попробовал написать один лайнер с linq, но я не вижу, как объединить 2 списка. Union и Join не то, что мне нужно.

1
ответ дан Blindy 18 August 2018 в 19:25
поделиться

Я не пробовал это, но я думаю, что это сделало бы это:

i %= list.Length;
int index = i;
do {
  index %= list.Length;
  sb.AppendFormat("{0} ", list[index]);
while (++index != i);
0
ответ дан Brent Arias 18 August 2018 в 19:25
поделиться
public string SetStart(int startAt)
{
    const string sentence = "this is a test so it is";

    var words = sentence.Split(' ');

    var x = (startAt > words.Count()) ? startAt%words.Count() : startAt;

    return string.Join(" ", words.Skip(x).Concat(words.Take(x)));            
}
-1
ответ дан Kam 18 August 2018 в 19:25
поделиться
  • 1
    Хорошо, поэтому я получил модуль вокруг неправильного пути, но теперь он исправлен :) – Kam 23 November 2010 в 00:54

Вот мерзость, пытающаяся максимально влиться в одну строку:

static string zee(string sentence, int wordCount)
{
  var words = sentence.Split(' ');
  return string.Join(" ", new[] { words.Skip(words.Count() - wordCount), words.Take(words.Count() - wordCount) }.SelectMany(w => w).ToArray());
}
0
ответ дан OJ. 18 August 2018 в 19:25
поделиться
  • 1
    duh, SelectMany, я продолжал пытаться вспомнить, как объединить 2 перечисляемых на месте -.- – Blindy 23 November 2010 в 00:13
  • 2
    Да, к сожалению, нет метода сплющивания. Поэтому я склонен использовать подход SelectMany (id) :) – OJ. 23 November 2010 в 00:15

Вот как я решаю это с помощью строк.

    public static string zee(string origString, int i)
    {
        string[] splitStr = origString.Split(' ');
        string newStr = "";

        // Not sure what you meant by wrap around but this should
        // do the trick.
        i %= splitStr.Length;

        for (int j = (splitStr.Length - i); j < splitStr.Length; j++)
            newStr += splitStr[j] + " "; // Add spaces taken by split :(

        for (int j = 0; j < (splitStr.Length - i); j++)
            newStr += splitStr[j] + " ";

        return
            newStr;
    }
0
ответ дан Simon Campbell 18 August 2018 в 19:25
поделиться

Звучит как вопрос о домашнем задании для меня, но здесь эффективное использование .Net framework:

    private static string [] SplitWords(string s, int startWord)
    {
        string[] words = s.Split(' ');
        List<string> output = new List<string>();
        output.AddRange(words.Skip(startWord).ToArray());
        output.AddRange(words.Take(startWord).ToArray());
        return output.ToArray();
    }

В этой функции нет проверки ошибок, поэтому вам придется изменить ее для но вы получите эту идею.

-1
ответ дан SRM 18 August 2018 в 19:25
поделиться
  • 1
    Это не генерирует предложение с пробелами, как заданный вопрос. – OJ. 23 November 2010 в 00:10
  • 2
    Вряд ли вы создаете 3 массива в дополнение к результирующей строке (при условии, что вы снова прочитаете требования и исправите ее). Однако это можно сэкономить! – Blindy 23 November 2010 в 00:11
  • 3
    @OJ Я уверен, что вы можете понять, как сделать предложение с пробелами. Это довольно тривиально. Дело в том, что теперь слова упорядочены так, как вы этого хотите. @Blindy Поддержание - моя цель. Я пишу производственный код в большой командной среде. Последнее, что я хочу, - это кто-то спрашивает меня о некотором коде, который я написал 8 месяцев назад. Спасибо за комплимент! :) – SRM 23 November 2010 в 00:22
Другие вопросы по тегам:

Похожие вопросы: