Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Jagged Array (Array-of-Arrays) 
V
    Опции темы
gta4kv
Дата 3.1.2009, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: нет
Всего: 91



привет всем,

есть массив:
Код

string[][] oparts = new string[][]
                { 
                    new string[]
                    {
                       "","","","",
                    }, 
                    new string[]
                    {
                       "","","","",
                    }, 
                    new string[]
                    {
                        "","","","",
                    }, 
                    new string[]
                    {
                        "","","","", 
                    }, 
                    new string[]
                    {
                        "","","","",
                    }, 
                };


Будет заполняться так:
Код


                oparts[0][0] = "test";
                oparts[0][1] = "test2";
                oparts[0][2] = "test3";
                oparts[0][3] = "test4";

                oparts[1][0] = "test";
                oparts[1][1] = "test2";
                oparts[1][2] = "test3";
                oparts[1][3] = "test4";

итд..
Как можно все это сократить и вообще правильно написать из учета что главный массив может быть сколько угодно элементов.
Как? Генерировать циклом его, что ли?ъ
циклом у меня что-то не выходит. (очень не привычно после пхп:()

Это сообщение отредактировал(а) gta4kv - 3.1.2009, 12:42
PM MAIL   Вверх
PashaPash
Дата 3.1.2009, 13:29 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 9
Всего: 49



gta4kv, сократить примерно так:
1. Использовать List<string[]> или Dictionary<int, int[]> вместо массива - тогда будет "сколько угодно элементов".
2. Если каждый вложенный массив состоит именно из 4 элементов - подумать о том, не заменить ли этот массив на класс/структуру с 4 полями, или со свойством-индексатором.
Что-то вроде:
Код

class SomeThing
{
    public SomeThing()
    {
        for (int i=0; i<4; i++)
        {
            this._options[i] = "";
        }
    }

    public SomeThing(string option1, string option2, string option3, string option4)
    {
        this._options[0] = option1;
        this._options[1] = option2;
        this._options[2] = option3;
        this._options[3] = option4;
    }

    private string[] _options = new string[4];
    public string this[int index]
    {
        get
        {
            return this._options[index];
        }
        set
        {
            this._options[index] = value;
        }
    }
}

class Program
{
    static void Main(string[] args)
    {
        List<SomeThing> someThings = new List<SomeThing>();
        someThings.Add(new SomeThing());
        someThings.Add(new SomeThing("q", "w", "e", "r"));
    }
}

Вообще все зависит от того, зачем тебе этот массив нужен. И немного - от версии твоей студии.


--------------------
PM MAIL WWW   Вверх
gta4kv
Дата 3.1.2009, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: нет
Всего: 91



MS Visual C# Express Edition.

Массив —
Код

[0]
    [0] => вопрос
    [1] => правильный ответ
    [2] => ответ    
    [3] => ответ
[1]
    [0] => вопрос
    [1] => ответ
    [2] => ответ    
    [3] => правильный ответ

и так до бесконечности

Это сообщение отредактировал(а) gta4kv - 3.1.2009, 14:29
PM MAIL   Вверх
PashaPash
Дата 3.1.2009, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 9
Всего: 49



gta4kv, дык, не нужны тебе вложенные массивы вообще. Есть варианты, в зависимости от того, где и как нужно хранить данные. Самый простой - завести класс типа "вопрос" и заточить его под конкретную задачу.
Код

class Question
{
    public Question()
    {
        Answers = new List<string>();
    }

    public string Text { get; set; }
    public IList<string> Answers { get; set; }
    public int RightAnswerIndex { get; set; }

    public string RightAnswer
    {
        get
        {
            return Answers[RightAnswerIndex];
        }
    }
}

class Program
{
    static void Main(string[] args)
    {
        List<Question> questions = new List<Question>();
        questions.Add(new Question()
        {
            Text="The Answer to the Ultimate Question of Life, the Universe, and Everything",
            Answers = {"12", "21", "42"},
            RightAnswerIndex = 2
        });

        foreach (Question q in questions)
        {
            Console.WriteLine("Q: " + q.Text);
            Console.WriteLine("A: " + q.RightAnswer);
        }
    }

Если софтина только отображает вопросы - то класс Question сделай неизменяемым. Если будешь хранить в xml - то и так сойдет - добавить класс со списком вопросов, расставить атрибуты - и можно сохранять парой строк. Если в db - то лучше ответы выделить в отдельный класс...


--------------------
PM MAIL WWW   Вверх
gta4kv
Дата 3.1.2009, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: нет
Всего: 91



Мне бы ссылочку на ман, я там больше понимаю smile
Ибо переделать то что уже сделано не выходит, под твой пример smile

пс:
Код

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace program
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        int q = 0;
        string[][] oparts = new string[][]
                {  new string[] { "","","","",}, new string[] { "","","","",}, new string[] { "","","","",}, new string[] { "","","","",}, new string[] { "","","","",}, new string[] { "","","","",}, new string[] { "","","","",}, new string[] { "","","","",}, new string[] { "","","","",}, new string[] { "","","","",}, new string[] { "","","","",}, new string[] { "","","","",}, new string[] { "","","","",}, new string[] { "","","","",}, new string[] { "","","","",}, new string[] { "","","","",}, new string[] { "","","","",},};
        int questions = 0;
        int right_answer = 0;
        int right_answers = 0;
        int user_answer = 0;
        private void loadbase(string file)
        {
           
            string[] q = System.IO.File.ReadAllLines(file);
            Random random = new Random();
            q = (from word in q
                 orderby random.Next()
                 select word).ToArray();

            questions = q.Length;
            for (int i = 0; i < q.Length; i++)
            {

                
                string str = q[i];
                char split = '|';                
                string[] parts = str.Split(split);

                oparts[i][0] = parts[0];
                oparts[i][1] = parts[1];
                oparts[i][2] = parts[2];
                oparts[i][3] = parts[3];
            }
        }

        private void complete()
        {
            result.Visible = true ;
            button1.Visible = false;
            r1.Text = (this.right_answers).ToString();
            r2.Text = ((this.questions - this.right_answers)).ToString();

            int procent = (right_answers - 1) * 100 / questions;
            int otc = 1;
            if (procent <= 20) otc = 1;
            if (procent <= 40 && procent > 20) otc = 2;
            if (procent <= 60 && procent > 40) otc = 3;
            if (procent <= 80 && procent > 60) otc = 4;
            if (procent <= 100 && procent >80 ) otc = 5;
            r3.Text = otc.ToString();

        }

        private void loadquest()
        {
            quest.Text = "Вопрос " + (q + 1) + " из " + questions;
            if ((q + 1) > questions)
            {
                complete();
                return;
            }
            question.Text = oparts[q][0];
            v1.Text = oparts[q][1];
            v2.Text = oparts[q][2];
            v3.Text = oparts[q][3];
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            result.Visible = false;
            this.loadbase("base.txt");
            loadquest();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            for (int i = 1; i <= 3; i++)
            {
                if (oparts[q][i].Contains('{'))
                {
                    this.right_answer = i;
                    break;
                }
            }

            if (v1.Checked) this.user_answer = 1;
            if (v2.Checked) this.user_answer = 2;
            if (v3.Checked) this.user_answer = 3;
            if (this.user_answer == this.right_answer) this.right_answers++;
            q++;
            loadquest();
        }
    }
}



Добавлено через 4 минуты и 44 секунды
Я просто пока не совсем привык к ооп smile
по этому
Цитата

2. Если каждый вложенный массив состоит именно из 4 элементов - подумать о том, не заменить ли этот массив на класс/структуру с 4 полями, или со свойством-индексатором.

немножко меня пугает, хотя что-то типа того делал на яве smile

Это сообщение отредактировал(а) gta4kv - 3.1.2009, 16:23
PM MAIL   Вверх
Hades
Дата 3.1.2009, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 226
Регистрация: 8.8.2008

Репутация: 1
Всего: 37



Цитата(gta4kv @  3.1.2009,  11:40 Найти цитируемый пост)
главный массив может быть сколько угодно элементов.

а после того как мы создали массив, количество элементов изменяется?
PM MAIL   Вверх
gta4kv
Дата 3.1.2009, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: нет
Всего: 91



Hades, нет

Добавлено через 11 минут и 17 секунд
все, придумал smile
Цитата

       string[] q = System.IO.File.ReadAllLines(file);
       parts = new string[q.Length, 4];

всего то smile

PM MAIL   Вверх
Hades
Дата 3.1.2009, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 226
Регистрация: 8.8.2008

Репутация: 1
Всего: 37



Цитата(gta4kv @  3.1.2009,  15:35 Найти цитируемый пост)
Hades, нет

ну а в чём тогда проблема

Код

int q; // количество элементов
Console.WriteLine("Vvedite q:");
q = Int32.Parse(Console.ReadLine());

string[,] str = new string[q, 4];

for (int i = 0; i < q; ++i)
    for (int j = 0; j < 4; ++j)
        str[i, j] = i + "" + j; // заполняем

for (int i = 0; i < q; ++i)
{                
    for (int j = 0; j < 4; ++j)
        Console.Write(str[i,j]+ "  ");

    Console.WriteLine();
}


Добавлено через 2 минуты и 43 секунды
Цитата(gta4kv @  3.1.2009,  15:35 Найти цитируемый пост)
все, придумал

ну что-же, рад что получилось  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0509 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.