Js选择排序的问题。我这段代码,为何实现不了。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Js选择排序的问题。我这段代码,为何实现不了。相关的知识,希望对你有一定的参考价值。

Js选择排序的问题。我这段代码,为何实现不了。从小到大排序,或者从大到小排序。

参考技术A 大哥,你这段代码问题大了。给你3个排序的方式,自己研究。
冒泡排序:(耗时长)
var box=[1,3,5,7,9,2,4,6,8];
for(var i=0;i<box.length;i++)
for(var j=0;j<box.length-i;j++)
if(box[j]>box[j+1])
var tmp=box[j];
box[j]=box[j+1];
box[j+1]=tmp;



console.log(box);
快速排序:(耗时短)
var box=[1,3,5,7,9,2,4,6,8];
function quick(args)
if(args.length<=1)return args
var baseIndex=Math.floor(args.length/2);
var baseValue=args.splice(baseIndex,1)[0];
var left=[];
var right=[];
for(var i=0;i<args.length;i++)
if(args[i]<baseValue)
left.push(args[i]);
else
right.push(args[i]);


return quick(left).concat(baseValue,quick(right));

console.log(quick(box));
sort方法:ascii表方式排序
var box=[1,3,5,7,9,2,4,6,8];
console.log(box.sort());本回答被提问者和网友采纳
参考技术B 感觉好像逻辑思路有问题,你能找出余下数组项的最值,但是没有和当前值交换位置,最好贴源码上来。说一句,js的数组本来就有sort方法,不用自己实现。

集团不更新状态。谁能告诉我这段代码有啥问题。这是我第一次尝试使用 bloc 架构

【中文标题】集团不更新状态。谁能告诉我这段代码有啥问题。这是我第一次尝试使用 bloc 架构【英文标题】:Bloc not updating state. Can anybody tell me what is wrong with this code. This is my first try with bloc architecture集团不更新状态。谁能告诉我这段代码有什么问题。这是我第一次尝试使用 bloc 架构 【发布时间】:2021-09-12 06:05:52 【问题描述】:

集团没有更新状态。谁能告诉我这段代码有什么问题。有两个按钮,第一个触发第一个事件,第二个按钮触发第二个事件。但就我而言,状态没有更新。我不知道为什么这不是在我的情况下更新状态。

集团类

  class MyBloc extends Bloc<MyEvent, MyState> 
  MyBloc() : super(LoadingState());

  @override`enter code here`
  Stream<MyState> mapEventToState(MyEvent event) async* 
    if (event is FirstEvent) 
      yield* firstFunction();
     else if (event is SecondEvent) 
      yield* secondFunction();
    
  

  Stream<MyState> firstFunction() async* 
    yield LoadingState();
    try 
      final String name = Repository().getFirstName();
      yield FirstState(name: name);
     on Exception 
      yield ErrorState();
     catch (_) 
      yield ErrorState();
    
  

  Stream<MyState> secondFunction() async* 
    yield LoadingState();
    try 
      final String name = Repository().getLastName();
      yield SecondState(name: name);
     on Exception 
      yield ErrorState();
     catch (_) 
      yield ErrorState();
    
  

事件类

@immutable
abstract class MyEvent extends Equatable 
  const MyEvent();


class FirstEvent extends MyEvent 
  const FirstEvent();

  @override
  List<Object?> get props => [];


class SecondEvent extends MyEvent 
  const SecondEvent();

  @override
  List<Object?> get props => [];

状态类

@immutable
abstract class MyState extends Equatable 
  const MyState();


class LoadingState extends MyState 
  const LoadingState();

  @override
  List<Object?> get props => [];


class FirstState extends MyState 
  const FirstState(required this.name);
  final String name;

  @override
  List<Object?> get props => [];


class SecondState extends MyState 
  const SecondState(required this.name);
  final String name;

  @override
  List<Object?> get props => [name];


class ErrorState extends MyState 
  const ErrorState();

  @override
  List<Object?> get props => [];

存储库

class Repository 
  /// get data from api
  String getFirstName() 
    return "First name";
  

  String getLastName() 
    return "last name";
  

主屏幕

class MyHomePage extends StatefulWidget 
  @override
  _MyHomePageState createState() => _MyHomePageState();


class _MyHomePageState extends State<MyHomePage> 
  MyBloc _myBloc = MyBloc();
  @override
  void dispose() 
    _myBloc.close();
    super.dispose();
  
  @override
  Widget build(BuildContext context) 
    return Scaffold(
      backgroundColor: Colors.white,
      body: Center(
          child: Column(
        children: [
          SizedBox(
            height: 150,
          ),
          BlocBuilder<MyBloc, MyState>(builder: (context, state) 
            if (state is LoadingState) 
              return CircularProgressIndicator();
             else if (state is FirstState) 
              return Text(state.name);
             else if (state is SecondState) 
              return Text(state.name);
             else if (state is ErrorState) 
              return Text("Error");
            
            return const SliverFillRemaining(
              child: Text('Something went wrong!'),
            );
          ),
          SizedBox(
            height: 50,
          ),
          GestureDetector(
            onTap: () async
              _myBloc.add(FirstEvent());
              await Future.delayed(Duration.zero);
            ,
            child: Container(
              color: Colors.greenAccent,
              width: 200,
              height: 50,
              child: Center(
                child: Text("Show First Name"),
              ),
            ),
          ),
          SizedBox(
            height: 50,
          ),
          GestureDetector(
            onTap: () async
              _myBloc.add(SecondEvent());
              await Future.delayed(Duration.zero);
            ,
            child: Container(
              color: Colors.greenAccent,
              width: 200,
              height: 50,
              child: Center(
                child: Text("Show Last Name"),
              ),
            ),
          )
        ],
      )),
    );
  

主要功能

void main() 
  runApp(MyApp());

我的应用

class MyApp extends StatelessWidget 
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) 
    return BlocProvider(
      create: (context) => MyBloc(),
      child: MaterialApp(
        title: 'Flutter Demo',
        theme: ThemeData(**strong text**
          primarySwatch: Colors.blue,
        ),
        home: MyHomePage(),
      ),
    );
  

【问题讨论】:

【参考方案1】:

您的问题是如何初始化 MyBloc 实例。

查看the docs 了解更多信息,但基本上不是这个

MyBloc _myBloc = MyBloc();

在您的构建方法中像这样初始化您的MyBloc,以便它可以访问上下文。

final _myBloc = context.read<MyBloc>();

这应该会更新您的状态。

【讨论】:

以上是关于Js选择排序的问题。我这段代码,为何实现不了。的主要内容,如果未能解决你的问题,请参考以下文章

为啥选择排序算法的这段代码没有给出输出?

java关于collections的排序,默认是升序,为啥我这段代码得到的结果是降序?

这段代码是关于选择排序的,但是当我运行代码时它没有按预期工作

js排序算法03——选择排序

排序算法——选择排序(js语言实现)

十大排序总结(js实现稳定性内外部排序区别时间空间复杂度冒泡快速直接选择堆直接插入希尔桶基数归并计数排序)