Страницы

Поиск по вопросам

четверг, 28 марта 2019 г.

Мощный парсер JSON для C#

Здравствуйте! Появилась задача парсить несложные json файлы из .NET приложения. Ссылка на пример такого файла. мне удалось разглядеть 4 массива: "artists", "tracks", "friends", "albums". Сам только начинающий программист, подскажите, пожалуйста, нужную библиотеку для доступа к массивам и их содержимому.


Ответ

Ну для начала удобный он-лайн парсер, просто, что бы понять структуру: json.parser.online.fr Ну и сама библиотека для .Net: json.codeplex.com

Как сделать, чтобы элемент двигался вместе scrollbar?

Здравствуйте. Я хочу поставить div element вверху страницу, а когда буду изменять scrooll, то элемент должен вместе с ним двигаться.


Ответ

Элементу Нужно установить фиксированное позиционнирование Например #main{ position:fixed; } или

В чем польза рекурсии?

Читал что "рекурсия обычно замедляет работу программы и расходует лишнюю память". Это во всех случаях? И какая еще от нее есть польза кроме как компактной записи кода? И в каких случаях она необходима?


Ответ

Бытует мнение, что рекурсия является очень выразительным|естественным|няшечка|etc средством для реализации некоторых действий. Рекурсия общего вида: Замедляет, т.к. много ( в т.ч. бесконечно ) вызовов функций. Расходует память, т.к. каждый вызов функции хранит данные в стеке Есть ещё, т.н., хвостовая рекурсия. ( ИМХО - не рекурсия вовсе, а просто сахар для цикла ): Суть в том, что результат вызова итерации хвостовой рекурсии - не обрабатывается предыдущим шагом, и копилятор/интерпритатор может заменить работу с такой функцией - на цикл, который лишён недостатков указанных выше. 1) Пример хвостовой рекурсии ( JS, факториал ): function fact( step, res ){ if ( step < 2 ) return res; else return fact( step - 1, res * step ); }
fact_10 = fact( 10, 1 ); 2) Тот-же смысл, но обычная рекурсия: function fact( step ){ if ( step < 2 ) return 1; else return step * fact( step - 1 ); }
fact_10 = fact( 10 ); Разница, как уже указывал: Результат вызова никак не используется ( просто проброс на уровень выше ) Результат вызова перед возвращением подвергается некой операции. Вариант 1 легко ( алгоритм простой ) оптимизируется до такого кода: function fact( num ){ var res = 1;
while( num > 1 ){ res *= num; num--; }
return res; } Либо совсем кратко ( но в asm - тоже самое ): function fact( num ){ var res = 1;
while( num > 1 ) res *= num--;
return res; }

Получение текущих GPS координат

Как запросить текущие GPS координаты устройства? Я видел функцию getLasKnownLocation но ее название и применение говорит само за себя. Требуется получать (запрашивать у модуля) текущую локацию телефона


Ответ

Примерно так: public class MyLocationActivity extends Activity implements LocationListener { private static final String TAG=MyLocationActivity.class.getName();
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this); }
@Override public void onLocationChanged(Location location) { if (location != null) { Log.d(TAG, "Широта="+location.getLatitude()); Log.d(TAG, "Долгота="+location.getLongitude()); } }
@Override public void onProviderDisabled(String provider) { }
@Override public void onProviderEnabled(String provider) { }
@Override public void onStatusChanged(String provider, int status, Bundle extras) { } } Только надо озаботиться соотвествующими пермишеном в манифесте

Аналог push() для объектов

Всем привет. Сегодня столкнулся с такой проблемой. Мне понадобилось добавлять элементы в ассоциативный массив. На JavaScript нет ассоциативных массивов ,поэтому я сделал как объект. Теперь не могу найти аналог функции push(). Подскажите, если кто-нибудь знает. Спасибо.


Ответ

вы хотите, чтобы ключами были обычные инкрементирующиеся числа? Не совсем. Первый ключ - какое-то слово, второй ключ - числа. obj['key'] = []; obj['key'].push('value1'); obj['key'].push('value2'); obj['key'][0];// 'value1' obj['key'][1];// 'value2'

Кодировка в Sublime Text 2

Раньше был на Notepad++, сейчас решил осваивать новый для меня текстовый редактор. Возник вопрос по поводу кодировки: где её задавать/изменять? В Notepad++ у файла была кодировка UTF-8 (без BOM): открываю его в Sublime Text и вижу, что кириллица отображается некорректно.


Ответ

У меня в меню File есть пункт Reopen With Encoding... Однако, я использую Mac-версию, но думаю, что и на остальных есть такая.

Затемнение родительского окна (wpf)

Те кто работал с delphi должны понять о чем речь, при открытии в модальном окне дочернего окна, нужно сделать затемнение родительского, кто знает как это сделать в wpf? А то у нас окон много, и при открытии они немного сливаются по цветам...вообщем нужно затемнить прошлое окно, есть идеи?


Ответ

Если не ошибаюсь, вам надо вот это
///

/// Apply Blur Effect on the window /// /// private void ApplyEffect(Window win) { System.Windows.Media.Effects.BlurEffect objBlur = new System.Windows.Media.Effects.BlurEffect(); objBlur.Radius = 4; win.Effect = objBlur; }
/// /// Remove Blur Effects /// /// private void ClearEffect(Window win) { win.Effect = null; }
и, собственно, применение:
private void btnShowDialog_Click(object sender, RoutedEventArgs e) { WinModalDialog objModal = new WinModalDialog(); objModal.Owner = this; ApplyEffect(this);
objModal.ShowDialog();
ClearEffect(this); }