Ответ 1
Почему вы не используете это?
int[] array = { 12, 56, 89, 65, 61, 36, 45, 23 };
int max = array.Max();
int min = array.Min();
Это работает отлично... но когда я использую foreach
вместо for
, это не работает. Я не понимаю, что for
и foreach
такие же.
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
int[] array = new int[10];
Console.WriteLine("enter the array elements to b sorted");
for(int i=0;i<10;i++)
{
array[i] = Convert.ToInt32(Console.ReadLine());
}
int smallest = array[0];
for(int i=0;i<10;i++)
{
if(array[i]<smallest)
{
smallest=array[i];
}
}
int largest = array[9];
for(int i=0;i<10;i++)
{
if (array[i] > largest)
{
largest = array[i];
}
}
Console.WriteLine("the smallest no is {0}", smallest);
Console.WriteLine("the largest no is {0}", largest);
Console.Read();
}
}
}
Почему вы не используете это?
int[] array = { 12, 56, 89, 65, 61, 36, 45, 23 };
int max = array.Max();
int min = array.Min();
Если вам нужно использовать foreach (по какой-то причине) и не хотите использовать функции bult-in, вот фрагмент кода:
int minint = array[0];
int maxint = array[0];
foreach (int value in array) {
if (value < minint) minint = value;
if (value > maxint) maxint = value;
}
static void PrintSmallestLargest(int[] arr)
{
if (arr.Length > 0)
{
int small = arr[0];
int large = arr[0];
for (int i = 0; i < arr.Length; i++)
{
if (large < arr[i])
{
int tmp = large;
large = arr[i];
arr[i] = large;
}
if (small > arr[i])
{
int tmp = small;
small = arr[i];
arr[i] = small;
}
}
Console.WriteLine("Smallest is {0}", small);
Console.WriteLine("Largest is {0}", large);
}
}
Таким образом, вы можете иметь наименьшее и наибольшее число в одном цикле.
Вы (обычно) не можете изменять коллекцию, которую вы выполняете при использовании foreach.
Хотя для и foreach, похоже, схожи с перспективой разработчика, они сильно отличаются от перспективы реализации.
Foreach
использует Iterator
для доступа к отдельным объектам, а for
не знает (или не заботится) о базовой последовательности объектов.
Общий метод расширения (получает значение Min
и Max
на одной итерации):
public static class MyExtension
{
public static (T Min, T Max) MinMax<T>(this IEnumerable<T> source) where T : IComparable<T>
{
if (source == null)
{
throw new ArgumentNullException(nameof(source));
}
T min = source.FirstOrDefault();
T max = source.FirstOrDefault();
foreach (T item in source)
{
if (item.CompareTo(min) == -1)
{
min = item;
}
if (item.CompareTo(max) == 1)
{
max = item;
}
}
return (Min: min, Max: max);
}
}
Этот код использовал С# 7 Tuple
using System;
namespace greatest
{
class Greatest
{
public static void Main(String[] args)
{
//get the number of elements
Console.WriteLine("enter the number of elements");
int i;
i=Convert.ToInt32(Console.ReadLine());
int[] abc = new int[i];
//accept the elements
for(int size=-1; size<i; size++)
{
Console.WriteLine("enter the elements");
abc[size]=Convert.ToInt32(Console.ReadLine());
}
//Greatest
int max=abc.Max();
int min=abc.Min();
Console.WriteLine("the m", max);
Console.WriteLine("the mi", min);
Console.Read();
}
}
}
Int[] number ={1,2,3,4,5,6,7,8,9,10};
Int? Result = null;
foreach(Int i in number)
{
If(!Result.HasValue || i< Result)
{
Result =i;
}
}
Console.WriteLine(Result);
}
public int MinimumValue { get; private set; }
public int MaxmimumValue { get; private set; }
public void num()
{
int[] array = { 12, 56, 89, 65, 61, 36, 45, 23 };
MaxmimumValue = array[0];
MinimumValue = array[0];
foreach (int num in array)
{
if (num > MaxmimumValue) MaxmimumValue = num;
if (num < MinimumValue) MinimumValue = num;
}
Console.WriteLine(MinimumValue);
Console.WriteLine(MaxmimumValue);
}
Вот полная программа, приведенная ниже
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using System.Diagnostics;
namespace oops3
{
public class Demo
{
static void Main(string[] args)
{
Console.WriteLine("Enter the size of the array");
int x = Convert.ToInt32(Console.ReadLine());
int[] arr = new int[x];
Console.WriteLine("Enter the elements of the array");
for(int i=0;i<x;i++)
{
arr[i] = Convert.ToInt32(Console.ReadLine());
}
int smallest = arr[0];
int Largest = arr[0];
for(int i=0;i<x;i++)
{
if(smallest>arr[i])
{
smallest = arr[i];
}
}
for (int i = 0; i < x; i++)
{
if (Largest< arr[i])
{
Largest = arr[i];
}
}
Console.WriteLine("The greater No in the array:" + Largest);
Console.WriteLine("The smallest No in the array:" + smallest);
Console.ReadLine();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Array_Small_and_lagest {
class Program {
static void Main(string[] args) {
int[] array = new int[10];
Console.WriteLine("enter the array elements to b sorted");
for (int i = 0; i < 10; i++) {
array[i] = Convert.ToInt32(Console.ReadLine());
}
int smallest = array[0];
foreach (int i in array) {
if (i < smallest) {
smallest = i;
}
}
int largest = array[9];
foreach (int i in array) {
if (i > largest) {
largest = i;
}
}
Console.WriteLine("the smallest no is {0}", smallest);
Console.WriteLine("the largest no is {0}", largest);
Console.Read();
}
}
}
Это долгое время. Может быть, вот так:
public int smallestValue(int[] values)
{
int smallest = int.MaxValue;
for (int i = 0; i < values.Length; i++)
{
smallest = (values[i] < smallest ? values[i] : smallest);
}
return smallest;
}
public static int largestvalue(int[] values)
{
int largest = int.MinValue;
for (int i = 0; i < values.Length; i++)
{
largest = (values[i] > largest ? values[i] : largest);
}
return largest;
}
*
Нет, для и foreach не то же самое. Существует некоторая разница между тем и для каждого здесь. Я упоминаю разницу:
*
Необходимо указать границы цикла (минимум или максимум).
int j = 0;
for (int i = 1; i <= 5; i++)
{
j = j + i ;
}
Оператор foreach повторяет группу встроенных операторов для каждого элемента массива или коллекции объектов. Вам не нужно указывать минимальные или максимальные границы цикла.
int j = 0;
int[] myArr = new int[] { 0, 1, 2, 3, 5, 8, 13 };
foreach (int i in myArr )
{
j = j + i ;
}
Используя цикл for, мы перебираем массив в обоих направлениях, то есть от индекса от 0 до 9 и от 9 до 0.
Но, используя цикл for-each, итерация возможна только в прямом направлении.
Когда он переходит в цикл, foreach копирует текущий массив в новый для операции. Хотя это не заботится об этой части.
Foreach не использует целочисленный индекс. Вместо этого он используется в коллекции - он возвращает каждый элемент в порядке.