2014-11-18 2 views
-1

У меня есть метод, который выглядит следующим образом:Как вызвать метод с помощью Tuples?

public static IEnumerable<Tuple<double, double>> LargestTriangleThreeBuckets(List<Tuple<double, double>> data, int threshold) 

Как один вызов такой метод? В настоящее время у меня есть массив двойников. У меня нет опыта работы с Tuples. Спасибо

Обновление: Большое спасибо всем. Немного разъяснения: я выполняю 16k fft на квадратурном сигнале, выбранном на частоте 192 кГц. Полученные 16384 значения должны быть уменьшены с дискретизацией для дисплея, который обычно меньше 1920 пикселей в ширину. Для этого я успешно выполнил процедуру downsampling LargestTriangleThreeBucket. Эта процедура доступна на GitHub

Я начинаю с массива удвоений, outputBuffer [16384], поместите это в список Tuple с значениями x, идущими от 1 до 16384, а затем вызовите метод.

 var myList = new List<Tuple<double, double>>(); 

     for (int x = 0; x < fftOrder; x++) 
     { 
      myList.Add(new Tuple<double, double>(outputBuffer[x], x+1)); 
     } 

     var result = LargestTriangleThreeBuckets(myList, 2048); 

     temporaryBuffer = result.Select(item => item.Item1).ToArray(); 

     //output resulting buffer to the scope which is the user interface display of the signal 

     scope1.Channels[0].Data.SetYData(temporaryBuffer, 0, fftOrder/8); 

fftOrder есть = 16384. Код, как это выполняется в 1 миллисекунду, достаточно быстр для реального отображения времени. Результат - значительное улучшение по сравнению с другими методами понижающей дискретизации, насколько я могу судить. Огромное спасибо всем, что помогло здесь!

+4

Как и любой другой метод. Вы передаете правильные параметры? В этом случае List > и int. –

+0

Возможный дубликат [Как создать массив кортежей?] (Http://stackoverflow.com/questions/20490884/how-to-create-an-array-of-tuples) –

ответ

0

Кортежи - это всего лишь общие объекты. Однако вы используете кортеж, просто представьте, что вы создали класс с таким количеством элементов соответствующего типа.

Например, Tuple < string, int, int> предоставит вам myObj.Item1 как строку, а Items 2 и 3 - как целое. Вы можете использовать его как это:

new Tuple<string, int, int>("Steve", 15, 22) 

В случае списка:

var myList = new List<Tuple<double, double>>(); 
myList.Add(new Tuple<double, double>(25, 23.333)); 
var result = LargestTriangleThreeBuckets(myList, 50); 
+0

Собственно, это не скомпилируется. Вызовите 'Tuple.Create()' или укажите общие параметры. – SLaks

+0

Исправлено. Спасибо, что сообщили мне, кодирование из памяти XD –

+0

Привет, спасибо. Итак, если я начинаю с одномерного массива, то есть данных [16384], мне сначала нужно преобразовать это в список с двумя значениями? Массив содержит значения Y для линейного графика. Думаю, мне нужно добавить значения X? – Tom

2

Как насчет

var result = LargestTriangleThreeBuckets(
    new List<Tuple<double, double>> 
     { 
      Tuple.Create(0.0, 0.0), 
      Tuple.Create(2.0, 1.0), 
      Tuple.Create(0.0, 2.0) 
     }, 
    42); 

Я думаю, метод, который вы ищете Tuple.Create.


Просто угадать, но PointF или что-то из System.Numerics.Vectors может быть лучшим представлением угла треугольника, чем Tuple<double, double>.

Смежные вопросы