Разделить элементы списка и разделить без выбранного элемента - PullRequest
0 голосов
/ 18 января 2019

Чтобы объяснить, что я хочу сделать, ниже приведен пример того, что может быть в моем listbox (три элемента списка текста):

                            listbox
                     ----------------------
                     |  hello my friends  |
                     |  how r u today?    |
                     |  i'm here          |
                     ----------------------

Я хочу разделить мои listbox предметы (разделив, где есть пробел) на 2 массива. Первый массив будет моим выбранным элементом (скажем, мы выбираем «привет, мои друзья», это всего лишь пример; может быть выбран второй или третий элемент) split, а второй массив будет моим массивом невыбранных элементов. Как это;

string[] firstArray = {"hello", "my", "friends"}

string[] secondArray = {"how", "r", "u", "today?", "i'm", "here"}

Но я не знаю, как я могу это сделать ... Это мой код:

         string[] LBI = lb2.Items.OfType<string>().ToArray();                
         string[] selectedItemSplit=lb2.SelectedItem.ToString().Split(' '); 
         string jo = string.Join(" ", LBI);
         string[] sp = jo.Split(new char[] { ' ' });

Спасибо за ответы ...

Ответы [ 2 ]

0 голосов
/ 18 января 2019
  • Убедитесь, что есть хотя бы один выбранный элемент, чтобы избежать исключений.
  • Вставить в первый массив содержимое текущего выбранного элемента ListBox, разделив его с помощью String.Split () (поскольку мы разделяем пробел, нет необходимости указывать разделитель: это по умолчанию).
  • Возьмите все невыбранные элементы (.Where индекс элемента не является текущим) и используйте SelectMany, чтобы сгладить массивы, сгенерированные путем разделения содержимого каждого Вещь.

int currentIndex = listBox1.SelectedIndex;
if (currentIndex < 0) return;

string[] firstArray = listBox1.GetItemText(listBox1.Items[currentIndex]).Split();

string[] secondArray = listBox1.Items.OfType<string>().Where((item, idx) => idx != currentIndex)
                               .SelectMany(item => item.Split()).ToArray();
0 голосов
/ 18 января 2019

Вы можете взять выбранный элемент, используя lb2.SelectedItem, и разделить его, как вы делаете, затем взять остальные элементы (отфильтровав элемент с индексом lb2.SelectedIndex с помощью предложения Where), а затем сделать SelectMany для результатов, разделив каждый на пробел:

var nonSelected = lb2.Items.OfType<string>()
    .Where((item, index) => index != lb2.SelectedIndex);

var first = lb2.SelectedItem.ToString().Split(' ');
var rest = nonSelected.SelectMany(others => others.Split(' ')).ToArray();
...