首页 文章 精选 留言 我的

精选列表

搜索[水平可扩展],共10000篇文章
优秀的个人博客,低调大师

弹出式菜单扩展学习

看其它应用软件时使用了很多的弹出菜单,蛮好的,顺带学习了下,写了个小DEMO,里面穿插的讲了下系统级的dialog使用小巧门,希望与大家交流学习。。下面来看代码: packagecom.xiaoma.popupmenu.demo; importandroid.app.Activity; importandroid.app.Dialog; importandroid.app.ProgressDialog; importandroid.os.Bundle; importandroid.util.Log; importandroid.view.MenuInflater; importandroid.view.MenuItem; importandroid.view.View; importandroid.view.View.OnClickListener; importandroid.widget.Button; importandroid.widget.PopupMenu; importandroid.widget.Toast; importandroid.widget.PopupMenu.OnMenuItemClickListener; /** *@Title:PopupMenuDemoActivity.java *@Packagecom.xiaoma.popupmenu.demo *@Description:弹出式菜单测试类 *@authorMZH */ publicclassPopupMenuDemoActivityextendsActivityimplementsOnClickListener,OnMenuItemClickListener{ privateButtonshow; /**Calledwhentheactivityisfirstcreated.*/ @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); init(); } /* *初始化实现 */ privatevoidinit(){ show=(Button)findViewById(R.id.button1); show.setOnClickListener(this); } /* *添加监听器(non-Javadoc) *@seeandroid.view.View.OnClickListener#onClick(android.view.View) */ @Override publicvoidonClick(Viewv){ if(v.getId()==R.id.button1){ showPopup(v); } } /* *弹出对话框实现 */ privatevoidshowPopup(Viewv){ PopupMenupopup=newPopupMenu(getApplicationContext(),v); popup.setOnMenuItemClickListener(this); MenuInflaterinflater=popup.getMenuInflater(); inflater.inflate(R.menu.menutest,popup.getMenu()); popup.show(); } /* *给选择的项添加监听器(non-Javadoc) */ @Override publicbooleanonMenuItemClick(MenuItemitem){ switch(item.getItemId()){ caseR.id.new_game: Log.i("KKK","奇怪"); ShowDialog(item.getTitle()); break; caseR.id.help: ShowDialog(item.getTitle()); break; caseR.id.file: ShowDialog(item.getTitle()); break; caseR.id.create_new: ShowDialog(item.getTitle()); break; caseR.id.open: ShowDialog(item.getTitle()); break; default: break; } returnfalse; } /* *弹出消息方法实现 *因为安卓系统中也自带这样一个临时弹出dialog的方法 *showDialog(intid),所以小马在此处违背了下一般的命名 *规则,起名:ShowDialog(),下面顺带讲下系统自带的临时dialog的实现 */ privatevoidShowDialog(CharSequencech){ Toast.makeText(getApplicationContext(),ch,Toast.LENGTH_SHORT).show(); } /** *在使用系统级自带的showDialog(intid)方法时,必须重载下面这个方法哦 */ @Override protectedDialogonCreateDialog(intid){ ProgressDialogdialog=newProgressDialog(this); dialog.setMessage("小马临时放的字符串一"); returndialog; } /** *在使用系统级自带的showDialog(intid,intid,Bundleargs)方法时, *必须重载下面这个方法 *id:dialog的ID *args为提供给showDialog的第二个方法 */ @Override protectedDialogonCreateDialog(intid,Bundleargs){ ProgressDialogdialog=newProgressDialog(this); dialog.setMessage("小马临时放的字符串二"); returndialog; } } 加载的菜单布局如下: <?xmlversion="1.0"encoding="utf-8"?> <menuxmlns:android="http://schemas.android.com/apk/res/android"> <itemandroid:id="@+id/new_game" android:icon="@drawable/ic_launcher" android:title="新游戏" android:showAsAction="ifRoom"/> <itemandroid:id="@+id/help" android:icon="@drawable/ic_launcher" android:title="帮助"/> <itemandroid:id="@+id/file" android:title="嵌套"> <menu> <itemandroid:id="@+id/create_new" android:title="开始新游戏"/> <itemandroid:id="@+id/open" android:title="开始"/> </menu> </item> <groupandroid:id="@+id/group_delete"> <itemandroid:id="@+id/menu_archive" android:title="组员一"/> <itemandroid:id="@+id/menu_delete" android:title="组员二"/> </group> </menu> 很简单的实现,每天进步一点点,吼吼。。学习再学习!加油。。。 附件:http://down.51cto.com/data/2359943 本文转自华华世界 51CTO博客,原文链接:http://blog.51cto.com/mzh3344258/791569,如需转载请自行联系原作者

优秀的个人博客,低调大师

c#扩展出MapReduce方法

MapReduce方法主体: 1 public static IDictionary<TKey, TResult> MapReduce<TInput, TKey, TValue, TResult>(this IList<TInput> inputList, 2 Func<MapReduceData<TInput>, KeyValueClass<TKey, TValue>> map, Func<TKey, IList<TValue>, TResult> reduce) 3 { 4 object locker = new object(); 5 ConcurrentDictionary<TKey, TResult> result = new ConcurrentDictionary<TKey, TResult>(); 6 //保存map出来的结果 7 ConcurrentDictionary<TKey, IList<TValue>> mapDic = new ConcurrentDictionary<TKey, IList<TValue>>(); 8 var parallelOptions = new ParallelOptions(); 9 parallelOptions.MaxDegreeOfParallelism = Environment.ProcessorCount; 10 //并行map 11 Parallel.For(0, inputList.Count(), parallelOptions, t => 12 { 13 MapReduceData<TInput> data = new MapReduceData<TInput> 14 { 15 Data = inputList[t], 16 Index = t, 17 List = inputList, 18 }; 19 var pair = map(data); 20 if (pair != null && pair.Valid) 21 { 22 //锁住防止并发操作list造成数据缺失 23 lock (locker) 24 { 25 //将匹配出来的结果加入结果集放入字典 26 IList<TValue> list = null; 27 if (mapDic.ContainsKey(pair.Key)) 28 { 29 list = mapDic[pair.Key]; 30 } 31 else 32 { 33 list = new List<TValue>(); 34 mapDic[pair.Key] = list; 35 } 36 list.Add(pair.Value); 37 } 38 } 39 }); 40 41 //并行reduce 42 Parallel.For(0, mapDic.Keys.Count, parallelOptions, t => 43 { 44 KeyValuePair<TKey, IList<TValue>> pair = mapDic.ElementAt(t); 45 result[pair.Key] = reduce(pair.Key, pair.Value); 46 }); 47 return result; 48 } View Code KeyValueClass定义: 1 public class KeyValueClass<K, V> 2 { 3 public KeyValueClass(K key, V value) 4 { 5 Key = key; 6 Value = value; 7 } 8 9 public KeyValueClass() 10 { 11 12 } 13 14 public K Key { get; set; } 15 16 public V Value { get; set; } 17 } View Code Console测试: 1 List<TestClass> listTestClass = new List<TestClass>(); 2 listTestClass.Add(new TestClass { a = "a", g = 1 }); 3 listTestClass.Add(new TestClass { a = "b", g = 3 }); 4 listTestClass.Add(new TestClass { a = "c", g = 4 }); 5 listTestClass.Add(new TestClass { a = "d", g = 2 }); 6 listTestClass.Add(new TestClass { a = "e", g = 1 }); 7 listTestClass.Add(new TestClass { a = "f", g = 2 }); 8 listTestClass.Add(new TestClass { a = "g", g = 5 }); 9 listTestClass.Add(new TestClass { a = "h", g = 6 }); 10 IDictionary<int, string> dic = listTestClass.MapReduce(t => 11 { 12 if (t.g < 5) 13 { 14 return new KeyValueClass<int, string>(t.g, t.a); 15 } 16 return null; 17 }, (key, values) => 18 { 19 return string.Join(",", values); 20 }); View Code TestClass定义: 1 public class TestClass 2 { 3 public string a { get; set; } 4 public string b { get; set; } 5 6 public string d { get; set; } 7 8 //public DateTime f { get; set; } 9 10 public int g { get; set; } 11 12 public List<TestClass> test { get; set; } 13 14 public Dictionary<string, string> dic { get; set; } 15 } View Code 结果: 1:a,e 2:d,f 3:b 4:c 词频性能测试

优秀的个人博客,低调大师

嵌入式模拟智能为机器人提供了新的自主水平

机器人不仅需要人工智能(AI)才能实现自主。他们还需要大量传感器,传感器融合以及边缘的实时推理。之前我们已经尝到了深度卷积神经网络的好处,如今来自激光雷达的更高数据处理的需求正在推动神经网络到新拓扑以获得自主。历史上第一个机器人是在20世纪50年代末到60年代早期的时候,准确的说,它还不能称得上是一个机器人,只能算是一个“编程的物品传送装置”用于GM生产线和压铸机周围移动产品。直到今天,机器人还没有脱离原来的概念:今天的机器人是可编程的,他们需要感知自己的环境,来确保他们所做的事情和他们的计划之间的合规性,他们需要在自己的环境中移动。那么什么推动机器人行业的发展呢?机器人技术作为一种行业和科学,旨在通过增加嵌入式模拟智能来最大化未来机器人行为的自由。这将需要:更多传感器用于机器人周围环境的更高精度模型。更好的传感器与控制算法的互连(以及更分散的控制算法)。更好的算法,可以从传感器数据中提取尽可能多的信息。根据控制算法的决定,更好的执行器可以更快,更准确地动作。在今天的技术领域,机器人已经获得了很多自主权,并使用来自互补金属氧化物半导体相机传感器,激光雷达和雷达的传感器来适应各种各样的应用。虽然相机具有比雷达更大的角分辨率和动态范围,但它们无法提供激光雷达所具有的动态范围,相机也无法在烟雾或多尘的环境中工作。 由于机器人被设计为最灵活的选择,以适应最广泛的应用,它们需要在低光,多尘或明亮的环境中运行。通过组合传感器信息(即传感器融合)可以实现这种灵活性。换句话说,来自不同传感器的信息可用于重建机器人环境的弹性表示,从而在更多应用中实现自治。例如,如果短暂覆盖摄像机,则其他传感器必须能够使机器人安全地运行。为了确保机器人能够360度了解其环境,机器人传感器数据需要以时间关键的方式进行路由,并且需要少量电缆连接到机器人控制器,以最大限度地提高连接的可靠性。 对于大多数机器人而言,边缘处的推理是确保机器人能够快速响应其环境变化的关键参数,这要归功于边缘处理所允许的固有低延迟。边缘推断可以用于卷积神经网络和用于图像分类或预测维护估计的类似神经网络拓扑,用于机器人路径规划的深度Q网络,或用于解决特定类别问题的定制神经网络。在不久的将来,传感器似乎不太可能发生太大变化,但所涉及的处理将会有所不同。成像传感器可能是高光谱的或提供更高的分辨率。激光雷达可能具有更高的波长,更安全,并提供更长的范围。雷达传感器可以提供更多的集成天线,但这些不会发生重大变化。将改变的是如何使用和汇总信息。自主机器人的进化是一个不断变化的目标。轮子和机器人的机器人现在被认为处于自治的边缘,当人类靠近它们时具有减速的能力,并且即使在它们移动时也可以避免撞击人类。随着嵌入式模拟智能的快速变化,这些“边缘”创新型机器人将在不久的将来不被认为是自主的,因为该行业正在快速发展和生产新技术,使机器人技术比以往任何时候都更加自主。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册