2016-11-23 4 views
-1

Я учащийся года 1, поэтому я не знаю много о C# еще ....
Есть ли способ проверить, содержит ли пользовательский массив массив определенной строки?
Если это так, мне нужно добавить значение в другой массив.C# Проверить массив для строки

Вот код, который я до сих пор:

var lookup = new Dictionary<string, string>   
{ 
    ["H1"] = "100", 
    ["O1"] = "56", 
    ["H2"] = "88", 
    ["O2"] = "46", 
    ["H3"] = "77", 
    ["O3"] = "37", 
    ["H4"] = "66", 
    ["O4"] = "28", 
    ["H5"] = "56", 
    ["O5"] = "20", 
    ["H6"] = "46", 
    ["O6"] = "12", 
    ["H7"] = "37", 
    ["O7"] = "0", 
    ["H8"] = "0", 
    ["O8"] = "0", 
};  

//input grades/subject 
int s; 
int g; 
int p; 

string[] grades = new string[6]; 
string[] subjects = new string[6]; 
string[] points = new string[6]; 

// Accepting value from user 
for (s = 0, g = 0,p=0; s <= 5; s++, g++,p++) 
{ 
    Console.Write("\nEnter your subject:\t"); 
    subjects[s] = Convert.ToString(Console.ReadLine()); 
    subjects[s] = subjects[s].ToUpperInvariant(); 


    Console.Write("\nEnter your grade:\t"); 
    grades[g] = Convert.ToString(Console.ReadLine()); 
    grades[g] = grades[g].ToUpperInvariant(); 
    if (!lookup.TryGetValue(grades[g], out points[p])) 
     Console.WriteLine("Wrong Grade Format!"); 

} 

Console.Clear(); 
for (s = 0, g = 0,p=0; s <= 5; s++, g++,p++) 
{ 
    Console.WriteLine("{0,15}:{1}:{2}", subjects[s], grades[g],points[p]);//output 
} 

Мне нужно проверить массив, созданный пользователем, и если есть Math то + 25points должен быть добавлен

+1

Это возможно. Можете ли вы показать, что вы сделали, чтобы попытаться решить проблему? – DVK

+0

Вы пробовали regEx? – Prajwal

+2

Почему у вас есть три переменные ('' '' '' '' '' '' '' ''), которые всегда будут одинаковыми? Считаете ли вы создание класса «Студент» со свойствами для «Классы», «Субъекты» и «Очки»? (Обычно наличие «параллельных коллекций» - это плохая идея.) –

ответ

0

Есть любой способ проверить, содержит ли массив [..] определенную строку

Да, есть. Метод называется даже точно так.
Сначала убедитесь, что вы используете необходимое пространство имен:

using System.Linq; 


if (subjects.Contains("MATH")) 
{ 
    // do what ever is needed 
} 

пс. Рассмотрим следующий советовании Джоном Скит

EDIT:

, как вы на самом деле можете следить за процессом ввода значения шага пользователя за шагом вы можете также проверить сразу, соответствует ли ввести свой критерий:

// Accepting value from user 
for (s = 0, g = 0,p=0; s <= 5; s++, g++,p++) 
{ 
    Console.Write("\nEnter your subject:\t"); 
    string input = Convert.ToString(Console.ReadLine()); 
    if (input.ToUpperInvariant() == "MATH") 
    { /* do what ever is needed */} 
    subjects[s] = input.ToUpperInvariant(); 

EDIT 2:

Поскольку вы увеличиваете все 3 переменные в обмен на петлю точно таким же образом, вы можете нам е только одна переменных и индекс каждый массив с тем же самым:

for (int i = 0; i <= 5; i++) 
{ 
    subjects[i]... 
    grades[i]... 
    points[i]... 
} 
+0

У меня нет возможности протестировать его сейчас, но я думаю, что пытался это сделать и Содержит не цвет в –

+0

@EduardsRatniks не будет окрашиваться? что вы имеете в виду? –

+0

@EduardsRatniks вы также можете поймать вход пользователя и проверить, соответствует ли он сразу. См. Мое редактирование –

0

Я переработан кодом реализацией некоторых пользовательских классов, так что вы можете получить некоторые идеи:

class Student 
{ 
    public string Name { get; } 
    public List<Grade> Grades { get; set; } 
    public Student(string name) 
    { 
     Name = name; 
     Grades = new List<Grade>(); 
    }  
} 
class Grade 
{ 
    public string Subject { get; set; } 
    public string Code { get; set; } 
    public int Points { get; set; } 
} 
class Program 
{ 
    static Dictionary<string, string> lookup = new Dictionary<string, string> 
    { 
     ["H1"] = "100", ["O1"] = "56", ["H2"] = "88", ["O2"] = "46", ["H3"] = "77", 
     ["O3"] = "37", ["H4"] = "66", ["O4"] = "28", ["H5"] = "56", ["O5"] = "20", 
     ["H6"] = "46", ["O6"] = "12", ["H7"] = "37", ["O7"] = "0", ["H8"] = "0", ["O8"] = "0", 
    }; 
    static void Main(string[] args) 
    { 
     Student s = new Student("new student"); 

     // Accepting value from user 
     while (s.Grades.Count < 6) //amount of grades you want to input 
     { 
      Grade g = new Grade(); 
      string points = string.Empty; 

      Console.Write("\nEnter your subject:\t"); 
      //There's no need to convert consoleReadLine to string 
      g.Subject = Console.ReadLine().ToUpperInvariant(); 

      //keep asking while the user doesn't insert a valid grade lookup code 
      while (string.IsNullOrEmpty(points)) 
      { 
       Console.Write("\nEnter your grade:\t"); 
       g.Code = Console.ReadLine().ToUpperInvariant(); 

       if (!lookup.TryGetValue(g.Code, out points)) 
        Console.WriteLine("Wrong Grade Format!"); 
       else 
        g.Points = int.Parse(points); 
      } 
      //points modification condition 
      if (g.Subject.Equals("Math", StringComparison.OrdinalIgnoreCase)) 
       g.Points += 25; 

      //add the grade data to the student's grades 
      s.Grades.Add(g); 
     } 
     Console.Clear(); 
     //output using a Linq query 
     s.Grades.ForEach(g => Console.WriteLine("{0,15}:{1}:{2}", g.Subject, g.Code, g.Points)); 
    } 
Смежные вопросы